如何在Python中处理命令行参数?
如果我期待001或999之类的任何东西(让我们将期望值限制在001 ... 999这个范围内),并且通过了其他几个参数并且想要忽略,那么这将是一个简单的表达式来处理命令行参数任何意外?如何在Python中处理命令行参数?
我明白,如果比如我需要找出是否“调试”中的参数中传递这将是类似的东西:
if 'debug' in argv[1:]:
print 'Will be running in debug mode.'
如何找出如果009或575获得通过?
所有这些都有望来电:
python script.py
python script.py 011
python script.py 256 debug
python script.py 391 xls
python script.py 999 debug pdf
在这一点上我不关心这样的电话:
python script.py 001 002 245 568
python script.py some unexpected argument
python script.py 0001
python script.py 02
...第一个 - 因为不止一个的“数字“论点;第二 - 因为......好,意外的论点;第三和第四 - 因为非3位数的参数。
正如其他人回答,optparse是最好的选择,但如果你只是想简单的代码尝试这样的事:
import sys, re
first_re = re.compile(r'^\d{3}$')
if len(sys.argv) > 1:
if first_re.match(sys.argv[1]):
print "Primary argument is : ", sys.argv[1]
else:
raise ValueError("First argument should be ...")
args = sys.argv[2:]
else:
args =()
# ... anywhere in code ...
if 'debug' in args:
print 'debug flag'
if 'xls' in args:
print 'xls flag'
编辑:下面是一个optparse例子,因为很多人都回答optparse没有真正解释为什么,或解释你必须改变以使其工作。
使用optparse的主要原因是它为您以后的扩展提供了更大的灵活性,并为您在命令行上提供了更大的灵活性。换句话说,您的选项可以按任意顺序显示,并且使用信息自动生成。但是,要使其与optparse一起工作,您需要更改规范,以在可选参数前面放置' - '或' - ',并且您需要允许所有参数以任意顺序排列。
因此,这里是使用optparse一个例子:
import sys, re, optparse
first_re = re.compile(r'^\d{3}$')
parser = optparse.OptionParser()
parser.set_defaults(debug=False,xls=False)
parser.add_option('--debug', action='store_true', dest='debug')
parser.add_option('--xls', action='store_true', dest='xls')
(options, args) = parser.parse_args()
if len(args) == 1:
if first_re.match(args[0]):
print "Primary argument is : ", args[0]
else:
raise ValueError("First argument should be ...")
elif len(args) > 1:
raise ValueError("Too many command line arguments")
if options.debug:
print 'debug flag'
if options.xls:
print 'xls flag'
与optparse这里的差异和你的天赋是,现在你可以有命令行,如:
python script.py --debug --xls 001
,你可以轻松地添加新的选项通过调用parser.add_option()
但注意:optparse自[Python]版本2.7已被弃用:optparse模块已被弃用且不会进一步开发;开发将继续使用argparse模块。“请参阅:http://docs.python.org/2/library/optparse.html – kkurian 2014-02-11 06:38:25
看看optparse模块。自己处理sys.argv对于非常简单的东西来说很好,但它很快就会失控。
请注意,如果您可以稍微更改参数格式,则可能会发现optparse更易于使用;例如用或--output=xls
代替debug
与--debug
和xls
。
我不知道这是当OP只是使用参数而不是选项时,它是值得的。 – 2009-02-20 01:18:57
请注意,optparse已被替换为[argparse](http://docs.python.org/library/argparse.html#module-argparse) – 2011-10-17 11:46:40
Van Gale在对参数使用正则表达式时基本上是正确的。但是,在使用optparse时,并不是绝对必要的,因为它使用optparse将sys.argv分成选项和参数,这取决于是否在前面加上“ - ”或“ - ”。一些示例代码要经过刚才的论点:
import sys
import optparse
claParser = optparse.OptionParser()
claParser.add_option(
(opts, args) = claParser.parse_args()
if (len(args) >= 1):
print "Arguments:"
for arg in args:
print " " + arg
else:
print "No arguments"
sys.exit(0)
是,args数组解析几乎相同的方式作为sys.argv中会是这样,但如果需要的话已经被添加到轻松添加选项的能力。有关optparse的更多信息,请查看relevant Python doc。
退房这个 http://stackoverflow.com/questions/25605380/passing-directory-to-python-script-as-command-line-argument/25605529#25605529 – 2014-09-01 13:41:18