无法将零参数传递给Windows命令行上运行的Python程序

时间:2018-07-13 05:47:13

标签: python windows command-line command-prompt command-line-parsing

当我直接通过命令行运行以下文件时

# winargs.py
import sys
print(sys.argv)

通过将该文件放在PATH中的目录中并在Window Command Prompt或Powershell中运行命令winargs.py,我得到了一个意外的结尾空字符串。

['winargs.py', '']

我希望它仅输出脚本名称,如下所示:

['winargs.py']

Windows配置

我以前根本无法传递参数,但是我跟随the instructions here"%*"注册表项添加了HKEY_CLASSES_ROOT\Python.File\shell\open\command,现在可以传递参数,从而运行winargs.py a b 1 2输出['winargs.py', 'a', 'b', '1', '2']。我正在使用Windows版Python的Anaconda发行版,并将该Python设置为运行*.py文件的默认程序。设置默认值后我修改的注册表项是

[HKEY_CLASSES_ROOT\Applications\python.exe\shell\open\command]
"C:\Users\Me\Anaconda3\python.exe"  "%1" "%*"

argparse的较大问题

运行用argparse编写的仅具有位置参数的脚本时,这会引起更大的困难。它不打印帮助消息,而是将空字符串解释为第一个位置参数。例如,对于程序

# winargparse.py
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("first_arg")
parser.parse_args()

我在命令提示符和PowerShell中都没有运行命令winargparse.py的输出,但是希望它像我运行argparse时一样显示默认的python winargparse.py帮助消息。喜欢

usage: winargparse.py [-h] first_arg
winargparse.py: error: the following arguments are required: first_arg

如何使Windows Command Prompt在不带参数和带参数的情况下运行我的Python文件?

1 个答案:

答案 0 :(得分:1)

在注册表记录中,%*周围不需要双引号。如果没有参数,它们会使Windows传递一个空参数。只需删除这些引号即可。