3

我刚刚注意到我用 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() 中,它仍然是错误的。

4

5 回答 5

5

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

于 2009-11-22T15:54:29.150 回答
5

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

这是行不通的

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

这也行不通

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

但这是有效的

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

总之谢谢大家。

于 2009-11-22T17:08:36.940 回答
3

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

于 2009-11-22T15:47:18.743 回答
2

当 Python 安装路径中有空格时, Google 搜索会显示此页面,该页面会发生相同的问题。我无法在这里重现它,但也许是问题所在?

在任何情况下,根据 MS 文档,仅当模式参数无效时才应返回此错误值 (EINVAL),此处并非如此。

于 2009-11-22T16:48:59.647 回答
2

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

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

于 2009-11-22T16:27:38.363 回答