gpt4 book ai didi

python - 在 python 脚本中解析命令行参数(getopt 问题)

转载 作者:太空宇宙 更新时间:2023-11-03 11:10:53 27 4
gpt4 key购买 nike

谁能看出为什么下面的脚本没有打印传递的参数?

import sys, getopt

def usage():
print 'Unknown arguments'

def main(argv):
try:
opts, args = getopt.getopt(argv,'fdmse:d',['files=','data-source=','mode=','start','end'])

except getopt.GetoptError:
usage()
sys.exit(999)

for opt, arg in opts:
# print opt,arg
if opt in('-f','--files'):
print 'files: ', arg #

if __name__ == "__main__":
main(sys.argv[1:])

当我在命令行运行脚本并传递参数 -f=dummy.csv 时,似乎调用了 usage() - 为什么?

顺便说一句,我发现程序流程的逻辑有点奇怪(我从 here 复制的)。通常,我会认为逻辑将在 try 分支中实现,然后是异常处理程序。

这是(如上面代码中粘贴的那样)编写 try/catch block 的“Pythonic”方式吗?

最佳答案

你得到答案了吗?

调试 python 异常的一种方法是将代码从 try block 中移出(或临时复制以进行调试)。您将获得完整的跟踪记录。

当然另一种方法是减少测试用例。在这里,我将问题减少到三行,并尝试了@s.lott 提示的解决方案(在 getopts 调用中使用“f:”),并在最后展示了使用一些不同的测试数据进行调用的行为:

$ cat x1.py
import sys, getopt
opts, args = getopt.getopt(sys.argv[1:],'fdmse:d',['files=','data-source=','mode=','start','end'])
print "opts=", opts, "args=", args

$ python x1.py -f=dummy.csv argblah
Traceback (most recent call last):
File "x1.py", line 2, in <module>
opts, args = getopt.getopt(sys.argv[1:],'fdmse:d',['files=','data-source=','mode=','start','end'])
File "/usr/lib/python2.6/getopt.py", line 91, in getopt
opts, args = do_shorts(opts, args[0][1:], shortopts, args[1:])
File "/usr/lib/python2.6/getopt.py", line 191, in do_shorts
if short_has_arg(opt, shortopts):
File "/usr/lib/python2.6/getopt.py", line 207, in short_has_arg
raise GetoptError('option -%s not recognized' % opt, opt)
getopt.GetoptError: option -= not recognized

$ sed 's/fdm/f:dm/' <x1.py >x2.py

$ diff x1.py x2.py
2c2
< opts, args = getopt.getopt(sys.argv[1:],'fdmse:d',['files=','data-source=','mode=','start','end'])
---
> opts, args = getopt.getopt(sys.argv[1:],'f:dmse:d',['files=','data-source=','mode=','start','end'])

$ python x2.py -f=dummy.csv argblah
opts= [('-f', '=dummy.csv')] args= ['argblah']

$ python x1.py -f dummy.csv argblah
opts= [('-f', '')] args= ['dummy.csv', 'argblah']

关于python - 在 python 脚本中解析命令行参数(getopt 问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3934799/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com