如何在同一个 python 脚本中使用 sys 和 argparse 而不会出现无法识别的参数错误?
Posted
技术标签:
【中文标题】如何在同一个 python 脚本中使用 sys 和 argparse 而不会出现无法识别的参数错误?【英文标题】:How can I use sys and argparse in same python script without getting unrecognized argument error? 【发布时间】:2021-03-05 15:11:23 【问题描述】:正如我的标题所暗示的,我正在使用 sys 和 argparse 将命令行参数添加到我的代码中。 Sys 用于添加 /sample/test/etc 之类的文件路径,而 argparse 用于在我的代码中添加单独的可选功能。当我只使用 argparse 时,我的代码工作得很好,但是当图片中出现 sys 时,出现以下错误:
test.py:错误:无法识别的参数:/sample/test/etc
我的代码的前几行我使用 sys 将文件路径保存到变量中:
导入系统
路径 = sys.argv[1]
无论如何我可以利用 sys 记录文件路径,同时保留我的 argparse,即 -r,稍后在代码中?
【问题讨论】:
默认情况下parse_args
使用sys.argv[1:]
(sys.argv[0]
是prog
)。所以仅仅看sys.argv[1]
并不会改变argparse
看到的东西。您可以更改sys.argv
,或将您自己的字符串列表作为参数传递给parse_args
。另一种选择是使用parse_known_args
。
我认为问题在于如果 argparse 不知道位置参数(路径),它会在看到它时引发错误。我猜最好的解决方案就是用 argparse 处理所有参数(或抑制 argparse 错误)。
为什么你的解析器不能识别path
参数? (除了你没有实现它)
【参考方案1】:
您不需要使用sys.argv
来捕获路径,您可以使用argparse
处理这两个参数。如果添加不带-
前缀的参数,它将被视为强制位置参数:
import argparse
parser = argparse.ArgumentParser(description='Description')
parser.add_argument('path', help='Path')
parser.add_argument('-r', '--relative', action='store_true',
help='optional argument')
args = parser.parse_args()
print('path: :'.format(args.path))
print('relative: :'.format(args.relative))
用法:
myscript.py [-h] [-r] path
【讨论】:
以上是关于如何在同一个 python 脚本中使用 sys 和 argparse 而不会出现无法识别的参数错误?的主要内容,如果未能解决你的问题,请参考以下文章
Pyspark 和使用 UDF:如何将 Python 参数(sys.argv、argparse)传递给 Python Worker?