Python getopt模块短选项-f文件名参数无法正常识别传值问题
故障原因
Python内置getopt模块的短选项配置规则如下:
- 短选项字符串中,单个字母代表无参数的开关选项
- 单个字母后紧跟英文冒号
:,代表该选项必须传入一个配套参数值
你的代码里短选项配置写的是'hu:f':
h无冒号,对应无参数的帮助选项,符合预期u后带冒号,对应需要传参的url选项,所以-u可以正常拿到传入值f后没有加冒号,getopt会将-f识别为不需要传值的开关选项,不会读取后面跟的文件名参数,因此短选项-f拿到的值为空。而长选项配置里你写了"filename="(末尾等号代表该长选项需要传参),所以--filename可以正常工作。
修复方法
修改getopt.getopt调用处的短选项字符串,给f后面补上英文冒号即可:
将原代码行:
(opts, args) = getopt.getopt(sys.argv[1:], 'hu:f', ["help", "url=", "filename="])
修改为:
(opts, args) = getopt.getopt(sys.argv[1:], 'hu:f:', ["help", "url=", "filename="])
验证
修改完成后重新执行短选项调用命令:
python3 imgkit-test.py -u urltest -f test
终端输出会正常识别-f传入的test参数,返回结果为('urltest', 'test'),和长选项执行效果一致。
内容的提问来源于stack exchange,提问作者lordvue
相关产品推荐
相关产品推荐

