python 2.6中没有spawnl函数?

时间:2009-11-22 15:44:18

标签: python python-2.6

我刚注意到我用python 2.5编写的旧代码现在不起作用了。我在python 2.6 btw。

>>> 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
>>>

有任何线索吗?或者你有任何os.spawn *的工作样本和NOWAIT选项。

更新

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

5 个答案:

答案 0 :(得分:5)

thrope是关于subprocess首选的权利。但是spawn *的东西仍在2.6中。实际上,您可以在错误消息中看到它。你的第一个arg似乎是有效的。我会检查第二个arg,这是路径。

答案 1 :(得分:5)

我通过最后添加DUMMY参数得到了它,虽然有点时髦

这不起作用

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

这也无效

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

但这是有效的

os.spawnl(os.P_NOWAIT,"Setup.exe","DUMMY")
无论如何,谢谢大家。

答案 2 :(得分:3)

我认为它建议最近使用subprocess模块而不是os.spawn*函数。 (我不能重现你的问题,但我不在窗户上)。

答案 3 :(得分:2)

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

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

答案 4 :(得分:2)

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

在任何情况下,according to MS documentation只有在mode参数无效时才会返回此错误值(EINVAL),而这种情况并非如此。