当我直接通过命令行运行以下文件时
# winargs.py
import sys
print(sys.argv)
通过将该文件放在PATH
中的目录中并在Window Command Prompt或Powershell中运行命令winargs.py
,我得到了一个意外的结尾空字符串。
['winargs.py', '']
我希望它仅输出脚本名称,如下所示:
['winargs.py']
我以前根本无法传递参数,但是我跟随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文件?
答案 0 :(得分:1)
在注册表记录中,%*
周围不需要双引号。如果没有参数,它们会使Windows传递一个空参数。只需删除这些引号即可。