从Windows命令行运行Python脚本,未传递参数

Wai*_*ung 15 python windows command-line command-line-arguments

我有一堆用Python编写的脚本.我从Windows命令提示符运行它们

c:> my_script.py arg1 arg2 arg3
Run Code Online (Sandbox Code Playgroud)

这可以在多年前的每台计算机和每个Windows版本中使用.刚才我的Windows 7系统崩溃了.该脚本已加载并执行.但是没有一个参数传递给脚本.

为了说明这一点,我有一个名为py_echo.py的脚本:

from pprint import pprint as pp
import sys

if __name__ =='__main__':
    pp(sys.argv)
Run Code Online (Sandbox Code Playgroud)

然后我用参数a,b,c执行它.他们都没有通过.

c:\Python27\Lib\site-packages>py_echo.py a b c
['C:\\0\\usr\\bin\\py_echo.py']
Run Code Online (Sandbox Code Playgroud)

如果我显式运行python.exe,则正确传递参数

c:\Python27\Lib\site-packages>python.exe c:\0\usr\bin\py_echo.py a b c
['c:\\0\\usr\\bin\\py_echo.py', 'a', 'b', 'c']
Run Code Online (Sandbox Code Playgroud)

它以前工作过.在我从PC上卸载了一堆旧版本的Python解释器和模块之后,它才开始崩溃.重新安装Python没有帮助.我想知道我该怎么做才能解决这个问题?

我已经变得非常依赖我多年来建立的脚本.当他们休息时我觉得非常残疾:(

小智 9

我遇到了与Windows 7/Python相同的问题,并且最终发现我必须设置正确的文件关联并通过regedit更新两个注册表项.

这篇优秀的文章都描述了这一点:

http://eli.thegreenplace.net/2010/12/14/problem-passing-arguments-to-python-scripts-on-windows/


Dav*_*d C 6

将答案移至 SO(而不是Jon 的答案中的链接):

修改以下两个注册表,以便将参数传递给 Python:

HKEY_CLASSES_ROOT\Applications\python.exe\shell\open\command
HKEY_CLASSES_ROOT\py_auto_file\shell\open\command
Run Code Online (Sandbox Code Playgroud)

添加%*到现有的"C:\PythonXX\python.exe" "%1",以便密钥现在看起来像:"C:\PythonXX\python.exe" "%1" %*

来源:http : //eli.thegreenplace.net/2010/12/14/problem-passing-arguments-to-python-scripts-on-windows/