以下「parser.add_option」語句可以工作,但如果腳本運行時沒有選項/ arg,它不會發出抱怨。如果沒有指定選項/參數,我希望它顯示幫助(-h/--help)作爲默認值。其次,如果我啓用下面的snip,即使指定了一個選項/ arg,我也會得到「錯誤:不正確的參數數目」。設置並要求使用默認的Python腳本OptionParser
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
'len(args)'總是至少有一個,因爲'args [0]'是python腳本本身的名字。你有沒有意思'如果len(args)== 1' – 2011-03-19 01:56:52
@TheSoundOfMatt:你在考慮'sys.argv'。在這種情況下,len(args)在OP的場景中等於零(沒有命令行輸入)。 – bernie 2011-03-19 02:09:46
對不對。 oops :) – 2011-03-21 05:19:27