我刚注意到我用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()中输入完整路径,它仍然是错误。
答案 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),而这种情况并非如此。