我有一个像这样的简单脚本(基于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']
所以我猜有些东西在直接调用脚本时没有传递参数。我想知道是否可以做任何事情以便可以直接调用脚本?
答案 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" %*
现在我的剧本就像我以前预期的那样工作。