python - Python 'getopt' 语法,允许可选的命令行参数,longopts 无法识别
问题描述
import sys
import getopt
paper = 0
try:
argv = sys.argv[1:]
except:
pass
try:
options = getopt.getopt(argv, 'p', ["paper"])
except:
pass
for name in options:
if name in ['p', '-p', '-paper', '--paper']:
paper = 1
$ python myApp.py p 或 -p
-- Works properly
$ python myApp.py -paper 或 --paper
-- Traceback (most recent call last):
File "myApp.py", line 52, in <module>
for name in options:
NameError: name 'options' is not defined
嘿,伙计。所以我不确定我做错了什么,我的longopts,“paper”没有被命令行识别。
谢谢你。
尊敬,
滑动3r
解决方案
您包装这两个语句的try-except
那个可能会掩盖错误并使其不分配选项。我已经重写了它,所以这些try-except
语句都消失了,并修复了一些使用getopt
.
您可能应该考虑返回的元组。根据文档(https://docs.python.org/3/library/getopt.html#getopt.getopt):
第一个是 (option, value) 对的列表;第二个是选项列表被剥离后留下的程序参数列表(这是 args 的尾随切片)
最终产品:
import sys
import getopt
argv = sys.argv[1:]
options, args = getopt.getopt(argv, 'p', ["paper"])
for opt_value in options:
if opt_value[0] in ['-p', '--paper']:
print('Paper arg set!')
这导致这些输出:
~$ python myApp.py --paper
Paper arg set!
~$ python myApp.py -p
Paper arg set!
切片允许起始索引超过长度:
> myargs = ['myapp.py', 'a', 'b', 'c']
> myargs[5:]
< []
推荐阅读
- python-3.x - 如何修复 Python 3 中的“import asammdf”错误
- javascript - 如何从对象列表中创建键值对象
- python - EVE - POST 请求时出现 500 内部服务器错误
- python - 这个 powerset 函数的时间复杂度是多少?
- swift - 无法在 ARKit 中旋转 SCNNode
- c# - 如何通过重复字符拆分字符串?
- hashicorp-vault - 是否可以在 hashcorp vault 中混合存储加密和未加密的键值对?
- python - 函数返回无
- asp.net-mvc - MVC 应用程序重定向到 Microsoft 登录页面(对于 Azure AD)而不是自定义设计的登录页面
- java - Java StompSession 发送消息 - Spring Boot