【发布时间】:2014-06-19 08:02:26
【问题描述】:
我正在尝试使 python 脚本能够同时采用两个选项,就像在这个例子中一样:
$ python main.py -o param1 -t table1
我希望能够有两种不同的行为;如果没有 -t 参数,我希望我的脚本处理我的所有 csv 表,如果有 -t 参数,我希望它只处理参数中给出的表。
我使用这样的东西:
import getopt, sys
def main():
try:
opts, args = getopt.getopt(sys.argv[1:], "hs:v:t:", ["help", "start=", "table="])
except getopt.GetoptError as err:
# print help information and exit:
print str(err) # will print something like "option -a not recognized"
usage()
sys.exit(2)
for o, a in opts:
if o == "-v":
verbose = True
elif o in ("-h", "--help"):
usage()
sys.exit()
elif o in ("-s", "--start"):
start = a
else:
assert False, "unhandled option"
# ...
if __name__ == "__main__":
main()
如果我这样做:print opts
我会找到:[('-o', 'param1'), ('-t', 'table1')]
但我无法找到获得第二个选项参数的方法。 你可以帮帮我吗?谢谢。
【问题讨论】:
-
如果可以的话,我建议切换到 argparse。它内置于 2.7 和 3+,并且在 pypi 中有一个用于早期版本的 argparse backport。
-
为什么没有
elif o in ("-t")子句? -
我想看看第一个选项是否得到验证,然后如果有第二个选项,我会做一些具体的事情。例如:elif o in ("-h", "--help"): if a in ("-t", "--table"): table = arg
-
我不确定您所说的“我无法找到获得第二个选项参数的方法”是什么意思。你具体说的是哪个论点?
-
第二个参数是table1
标签: python command-line-arguments getopt