选项/参数如何确定在程序执行期间选择哪个函数?对于示例,我有两个选项,具体取决于我希望他们使用各自功能的选项。我错过了什么?
import os, sys, glob
from optparse import OptionParser
def fname(arguments):
files = []
for arg in arguments:
if '*' in arg or '?' in arg:
# contains a wildcard character
files.extend(glob.glob(arg))
elif os.path.isdir(arg):
# is a dictionary
files.extend(glob.glob(os.path.join(arg, '*')))
elif os.path.exists(arg):
# is a file
files.append(arg)
else:
# invalid?
print '%s invalid' % arg
return files
# check if file exists locally, if not: download it
def downnload(filename, keyString):
if not os.path.exists(filename+keyString):
l.get_contents_to_filename(filename+keyString)
# List bucket contents
def blist(bucket):
for b in rs:
print b.name
def main():
usage = "usage: %prog [options] -f filename"
parser = OptionParser(usage)
parser.add_option('-d', '--download',
action='store', dest='download',
default=None, help='download files from cloud')
parser.add_option('-l', '--list',
action='store', dest='bucket',
default=None, help='list buckets or contents of specified bucket')
if len(sys.argv) == 1:
parser.print_help()
sys.exit()
(options, args) = parser.parse_args()
# from boto import
bucket_list = bucket.list()
for l in bucket_list:
keyString = str(l.key)
downnload(options.filename, keyString)
blist(options.bucket)
if __name__ == '__main__':
main()
答案 0 :(得分:1)
<击> 你错过了很多。
filename
在哪里给出值?keyString
在哪里给出值?bucket
在哪里给出值?list
,因为它是原始类型 您可能想查看optparse
tutorial。我假设你期望bucket
从--list
命令行参数接收值。该值将存储到options.bucket
中。这只是一个开始。
击>
我认为您想要更改main
的结尾以检查选项并调用相应的函数。类似的东西:
def main():
# much omitted
if options.filename is not None:
downnload(options.filename, keyString)
elif options.bucket is not None:
blist(options.bucket)
else:
print 'Either --download or --list is required.'
parser.print_help()
sys.exit(-1)
我认为这就是你要找的东西。它根据传入的命令行参数决定调用哪个函数。例如,如果用户传递--download filename
,则使用提供的文件名作为参数调用downnload
函数。