【问题标题】:Windows fails to pass the args to a python scriptWindows 无法将参数传递给 python 脚本
【发布时间】:2023-08-27 13:43:01
【问题描述】:

在 py_script.py 中:

import os
import sys

l = len(sys.argv) 
if  l == 1:
    print 'no args'
else:
    if l > 1: 
        print 'first arg is %s'%sys.argv[1]
    if l > 2:
        print 'second arg is %s'%sys.argv[2]

现在进入命令行,在我的 winXP 平台上:

d:\path\py_script.py 1 2

产量

first arg is 1
second arg is 2

但在我的 Win7 平台上,我得到了

no args

如果我这样做了

d:\path\python py_script.py 1 2

我明白了

first arg is 1
second arg is 2

如何让我的 Win7 环境按预期运行?

一些细节:
win7是64位的。
py2.6.6 on win7,py 2.6.4 on winXP。

【问题讨论】:

  • 在 Win 7 和 2.7.1 上为我工作。
  • Windows 在 python 中解析 argv 真的很糟糕 :(

标签: python windows windows-7 command-line


【解决方案1】:

基于 jtp 的回答。
好吧,我把注册表搞砸了。

这是我认为的步骤:

  1. 在做

    assoc .py=Python.File

  2. 通过 win explorer 选择一个 .py 文件,右键单击 -> x64 -> 打开方式 > 浏览至 c:\Python26\python.exe 选择“始终使用此打开..”框。 这实际上会立即更改 reg 值

    HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts.py\UserChoice

    Python.File

  3. 将 HKEY_CLASSES_ROOT\Python.File\shell\Open\Command 设置为 "C:\Python26\python.exe" "%1" %2 %3 %4 %5 %6 %7 %8 %9

注意:根据以前的经验,我确信混合版本会出现问题。 卸载/重新安装应该是要走的路。顺便说一句,我不想​​经历那个,因为所有的包,包括我从源代码构建的包,都会一团糟。

【讨论】:

  • 恭喜您解决了这个问题。
  • 最近在Win7 32位机上又遇到了这个问题。解决方案是一样的,这次在 HKCU\Software\Classes\py_auto_file\shell\open\command .. 通过在注册表中搜索 c:\python26\python.exe 条目来找到它。
  • 我也是。我更改了 HKEY_CLASSES_ROOT\py_auto_file\shell\open\command 添加 %* 因此: "C:\Python27\python.exe" "%1" %*
【解决方案2】:

我在 Win 7 上使用 2.7.1。

如果你想单独通过文件扩展名调用 Python 程序,你应该检查文件类型关联和命令行参数。我在 Windows 上安装/重新安装多个版本的 Python 时遇到了问题。

C:\dv>assoc .py
.py=Python.File

C:\dv>ftype Python.File
Python.File="C:\Python27\python.exe" "%1" %*

这个 TechNet 页面可以提供一些更详细的背景。

http://technet.microsoft.com/en-us/library/bb490912.aspx

【讨论】:

    【解决方案3】:

    我知道这不能回答您的问题,但python py_script.py 是执行 Python 脚本的标准方式。

    【讨论】: