【问题标题】:sys.argv not working on sytems with previous .py associationssys.argv 不适用于具有先前 .py 关联的系统
【发布时间】:2014-04-13 22:09:57
【问题描述】:

一点背景。我在一家 VFX 工作室工作,过去我们不得不为其他程序更改 .py 文件,只使用记事本或记事本++,但没有人真正使用过 python。

所以我现在一直在推出 python 自动化脚本,它们运行良好,除了一个问题。任何以前有与 python 以外的东西相关联的 python 脚本的机器都会失败。

使用参数调用脚本:

myScript.py <argument>

然后我使用:

print sys.argv
versionName = sys.argv[1]

这适用于所有从未将 python 文件与任何东西关联的机器,但是之前将 python 与另一个应用程序关联的机器会失败 它不会读取参数,我得到一个列表索引或范围错误。 打印行显示它也没有正确接收输入。

关于如何解决这个问题的任何想法?

编辑:脚本在运行时返回:

z:\pythonScripts>Make_version_1.py test
['Z:\\pythonscripts\\Make_Version_1.py']
Traceback (most recent call last):
    File "Z:\PythonScripts\Make_version_1.py", line 20, in <module>
        versionName = sys.argv[1]
IndexError: list Out of range

办公室中的大多数机器都不会返回此错误.. 只是在安装 python 2.7.6 之前 .py 文件与另一个程序相关联的机器,所以我知道代码有效。

【问题讨论】:

  • 将文件与notepad++关联时如何使用?双击?那你怎么传参数呢?
  • 很可能,有人手动设置了 .py 文件关联,而没有考虑命令行参数。如果你在这些机器上重新安装 python,它应该会为你解决问题。
  • Zhang - .py 文件以前与 notepad++ 相关联,不能作为脚本运行。 Nuke 使用 .py 文件通过它自己的内部 python 解释器将默认设置传递给程序。在我到达这里之前,他们只是用 notepad++ 编辑了 .py 文件。我按照正常使用 Markku 通过命令行向它们传递参数——它们上从来没有安装过 python。安装 Python 后,我手动将 .py 文件与 python 重新关联,它仍然无法正常工作
  • 你是如何手动重新关联python的?在命令行上还是在注册表中?如果您使用命令行,您是否这样做:assoc .py=PythonFile 然后ftype PythonFile=python.exe %1 %*
  • 我是通过 Windows 中的右键单击上下文菜单完成的。原来是“选择默认程序”。我只是那样重做了,我得到了同样的东西。脚本运行,但打印行只打印sys.argv[0],然后当我尝试分配变量时,它给了我该行的回溯错误和错误“索引错误:列表索引超出范围”。重申一下,这个脚本在所有以前没有 .py 扩展名的机器上都能完美运行

标签: python windows command-line-arguments sys


【解决方案1】:

你需要告诉 Windows 你想将参数传递给 python。打开命令提示符,然后执行以下操作:

assoc .py=PythonFile
ftype PythonFile=python.exe %1 %*

【讨论】:

  • 我这样做了,但并没有改变问题。我没有关联它的问题。我在让它正常运行时遇到问题。它可能与以前的文件关联无关,这只是我发现的共同因素。
  • 如果您输入assoc .py,您会看到什么?例如,如果它显示“XXX”,那么当您输入 ftype XXX 时会看到什么?
  • 当我这样做时,我得到.py=Python.FilePython.File="c:\Python27\python.exe" %1 %*。这与工作机器的结果相匹配。使用实际错误消息编辑初始帖子
【解决方案2】:

只是想分享一下我解决了这个问题。显然,预关联 .py 文件会在安装过程中破坏 Windows 路径的设置。在我的主机上我不需要调整它,但我现在通过将;c:\python27;c:\python27\scripts 添加到环境变量中来在所有机器上进行调整。现在可以正常使用了

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-24
    • 1970-01-01
    相关资源
    最近更新 更多