【问题标题】:There is no spawnl function in python 2.6?python 2.6 中没有 spawnl 函数?
【发布时间】:2009-11-22 15:44:17
【问题描述】:

我刚刚注意到我用 python 2.5 编写的旧代码现在不起作用。我在 python 2.6 顺便说一句。

>>> os.spawnl(os.P_NOWAIT,"setup.exe")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "c:\python26\lib\os.py", line 612, in spawnl
    return spawnv(mode, file, args)
OSError: [Errno 22] Invalid argument
>>>

有什么线索吗?或者您是否有任何带有 NOWAIT 选项的 os.spawn* 工作样本。

更新:

即使我把完整路径放在 os.spawnl() 中,它仍然是错误的。

【问题讨论】:

    标签: python python-2.6


    【解决方案1】:

    thrope 关于subprocess 是首选是正确的。但是 2.6 中仍然存在 spawn* 的内容。实际上,您可以在错误消息中看到这一点。您的第一个参数似乎是有效的。我会检查第二个参数,即路径。

    【讨论】:

    • 我会检查参数,因为在没有 setup.exe 的操作系统/机器上运行时我没有收到此错误
    • 我在同一个文件夹中有 setup.exe,我想我确定。
    • 但我没有任何东西可以传递 setup.exe 因为它只是调用安装程序。即使我输入了空白字符串“”,它也不起作用。
    • 可能当前工作目录不在环境的搜索路径中?但这些东西超出了我对 Windows 的理解范围。
    • Imm,我通过放入环境变量进行测试,仍然无法正常工作,这是程序自动更新选项的一部分,所以我认为我不应该弄乱用户的环境变量。
    【解决方案2】:

    我终于通过添加 DUMMY 参数让它工作了,虽然有点时髦

    这不行

    os.spawnl(os.P_NOWAIT,"Setup.exe")
    

    这也不行

    os.spawnl(os.P_NOWAIT,"Setup.exe","")
    

    但这是有效的

    os.spawnl(os.P_NOWAIT,"Setup.exe","DUMMY")
    

    还是谢谢大家。

    【讨论】:

      【解决方案3】:

      我认为现在建议使用subprocess 模块而不是os.spawn* 函数。 (我无法重现您的问题,但我不在 Windows 上)。

      【讨论】:

        【解决方案4】:

        Google 搜索会出现this page,当 Python 安装路径中有空格时会出现同样的问题。我无法在这里重现它,但也许是问题所在?

        无论如何,according to MS documentation 这个错误值 (EINVAL) 只有在模式参数无效时才应该返回,这里不是这种情况。

        【讨论】:

          【解决方案5】:

          os.spawnl() 需要可执行文件的完整路径,而os.spawnlp() 使用 PATH 环境变量来查找它。

          更新:在路径文字中使用未转义的反斜杠也是常见错误(尝试打印它以查看它是否被正确解释)。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-11-09
            相关资源
            最近更新 更多