设置并要求默认的Python脚本OptionParser
下面的 "parser.add_option" 语句可以正常工作,但如果脚本在没有提供选项或参数的情况下运行,它不会报错。如果没有指定选项或参数,我希望它能默认显示帮助信息(-h / --help)。
usage = "usage: %prog [options] arg"
parser = OptionParser(usage)
parser.add_option('-d', '--directory',
action='store', dest='directory',
default=None, help='specify directory')
parser.add_option('-f', '--file',
action='store', dest='filename',
default=None, help='specify file')
parser.add_option('-v', '--version',
action="store_true", dest="show_version",
default=False, help='displays the version number')
(options, args) = parser.parse_args()
#if len(args) < 1:
# parser.error("incorrect number of arguments")
其次,如果我启用下面的代码片段,即使我指定了选项或参数,也会出现 "错误:参数数量不正确" 的提示。
if len(args) < 1:
parser.error("incorrect number of arguments")
谢谢。
更新的代码和错误追踪信息如下
def main():
usage = "usage: %prog [options] arg"
parser = OptionParser(usage)
parser.add_option('-d', '--directory',
action='store', dest='directory',
default=None, help='specify directory')
parser.add_option('-f', '--file',
action='store', dest='filename',
default=None, help='specify file')
parser.add_option('-v', '--version',
action="store_true", dest="show_version",
default=False, help='displays the version number')
if len(sys.argv) == 1:
parser.print_help()
sys.exit()
(options, args) = parser.parse_args()
#if options.show_version:
# prog = os.path.basename(sys.argv[0])
# version_str = "1.0"
# print "version is: %s %s" % (prog, version_str)
# sys.exit(0)
filenames_or_wildcards = []
# remove next line if you do not want allow to run the script without the -f -d
# option, but with arguments
filenames_or_wildcards = args # take all filenames passed in the command line
# if -f was specified add them (in current working directory)
if options.filename is not None:
filenames_or_wildcards.append(options.filename)
错误追踪信息
$ python boto-backup.py Traceback (most recent call last): File "boto-backup.py", line 41, in <module>
filenames_or_wildcards = args # take all filenames passed in the command line NameError: name 'args' is not defined
1 个回答
1
我会这样做:
from optparse import OptionParser
import sys
def main():
usage = "usage: %prog [options] arg"
parser = OptionParser(usage)
parser.add_option('-d', '--directory',
action='store', dest='directory',
default=None, help='specify directory')
parser.add_option('-f', '--file',
action='store', dest='filename',
default=None, help='specify file')
parser.add_option('-v', '--version',
action="store_true", dest="show_version",
default=False, help='displays the version number')
if len(sys.argv) == 1:
parser.print_help()
sys.exit()
(options, args) = parser.parse_args()
# rest of program...
if __name__ == '__main__':
main()
首先,我们设置解析器和选项,然后检查是否有命令行输入。
如果没有输入,我们就打印帮助信息并退出。如果有输入,我们就继续执行程序。
当没有命令行参数运行时,输出是:
Usage: your_script_name_here.py [options] arg Options: -h, --help show this help message and exit -d DIRECTORY, --directory=DIRECTORY specify directory -f FILENAME, --file=FILENAME specify file -v, --version displays the version number
编辑(根据更新的代码):
在Python中,空格和缩进是很重要的。
确保你代码的其他部分缩进正确,这样它们才能属于main()
函数。
从filenames_or_wildcards = []
开始,你的代码就不在main()
函数的范围内了,因此没有名为args
的变量。