为啥直接调用 Python 脚本时 argparse 无法识别参数?
Posted
技术标签:
【中文标题】为啥直接调用 Python 脚本时 argparse 无法识别参数?【英文标题】:Why does argparse fail to recognise an argument when a Python script is called directly?为什么直接调用 Python 脚本时 argparse 无法识别参数? 【发布时间】:2016-07-29 12:52:47 【问题描述】:我有一个像这样的简单脚本(基于the docs for argparse
):
def Main():
parser = argparse.ArgumentParser()
parser.add_argument("issuenumber", help="Create a local branch based on the specified issue number", type=int)
args = parser.parse_args()
if args.issuenumber:
print("Starting work on issue #"+str(args.issuenumber))
if __name__ == "__main__":
Main()
但是,当我运行它时,它永远不会识别我传递给它的参数:
C:\Projects\PyTools>Gritter.py 1
usage: Gritter.py [-h] issuenumber
Gritter.py: error: the following arguments are required: issuenumber
如果我通过 python 调用脚本,它可以工作:
C:\Projects\PyTools>python Gritter.py 1
Starting work on issue #1
如果我打印出sys.argv
,我会得到:
C:\Projects\PyTools>Gritter 1
['C:\\Projects\\PyTools\\Gritter.py']
C:\Projects\PyTools>Python Gritter.py 1
['Gritter.py', '1']
所以我猜当直接调用脚本时有些东西没有传递参数。不知道有没有什么办法可以直接调用脚本?
【问题讨论】:
可能重复:***.com/questions/31546331/… 它本身看起来像这个的副本:***.com/questions/2640971/… 【参考方案1】:C\
表示您使用的是 Windows。您需要付出额外的努力来确保这个“直接调用”将参数传递给python
。
查找 windows shebang
我发现,来自您需要使用的 Python 文档
#!/usr/bin/python -v
传递参数
见https://docs.python.org/3/using/windows.html
argparse
使用sys.argv
。如果只有脚本名称,则调用未传递参数。
【讨论】:
我尝试添加#! /usr/bin/python
,但这似乎无济于事。我还添加了 args 的打印输出,显示直接调用脚本似乎删除了额外的参数。【参考方案2】:
基于mckoss` answer,我修改了以下注册表项:
HKEY_CLASSES_ROOT\Applications\python.exe\shell\open\command
从这里:
"C:\Python34\python.exe" "%1"
到这里:
"C:\Python34\python.exe" "%1" %*
现在我的脚本可以正常工作了。
【讨论】:
以上是关于为啥直接调用 Python 脚本时 argparse 无法识别参数?的主要内容,如果未能解决你的问题,请参考以下文章