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

Can't pass zero arguments to Python program running on Windows command line

当我运行下面的文件直接通过命令行

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

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

['winargs.py', '']

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

['winargs.py']

Windows配置

我以前根本无法传递参数,但我按照 the instructions here"%*" 添加到 HKEY_CLASSES_ROOT\Python.File\shell\open\command 注册表项,现在我可以传递参数 运行ning 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 中看到没有输出 运行ning 命令 winargparse.py,但希望它打印默认的 argparse 帮助消息,就像我 运行 python winargparse.py 看起来像

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

如何让 Windows 命令提示符进入 运行 我的 Python 文件既不带参数又带参数?

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