为什么直接调用Python脚本时argparse无法识别参数?

时间:2016-04-08 09:49:55

标签: windows python-3.4 argparse

我有一个像这样的简单脚本(基于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']

所以我猜有些东西在直接调用脚本时没有传递参数。我想知道是否可以做任何事情以便可以直接调用脚本?

2 个答案:

答案 0 :(得分:1)

C\表示您正在使用Windows。您需要付出额外的努力才能确保直接拨打电话'将参数传递给python

查找windows shebang我从Python文档中找到您需要使用

#!/usr/bin/python -v

传递参数

请参阅https://docs.python.org/3/using/windows.html

argparse使用sys.argv。如果只有脚本名称,那么调用就不会传递参数。

答案 1 :(得分:0)

基于mckoss` answer,我修改了以下注册表项:

HKEY_CLASSES_ROOT\Applications\python.exe\shell\open\command

由此:

"C:\Python34\python.exe" "%1"

对此:

"C:\Python34\python.exe" "%1" %*

现在我的剧本就像我以前预期的那样工作。