适用于Windows和Linux的Python系统调用

时间:2015-09-15 05:52:02

标签: python windows subprocess popen

我有一个奇怪的问题,我似乎无法解决

from subprocess import PIPE, Popen

exeLocation = "../Engine.exe"

# Works on windows
proc = Popen([exeLocation, arg1, arg2],stdout=PIPE,shell=True])
(out,err) = proc.communicate()

# Works on Linux
proc = Popen(" ".join([exeLocation, arg1, arg2]),stdout=PIPE,shell=True])
(out,err) = proc.communicate()

出于某种原因,如果在Windows上运行linux版本,则“..”不会引发命令错误。

由于某种原因,“exeLocation arg1 arg2”传递的命令在linux中无法使用Windows版本。

我需要一种方法在两个平台上使用相同的代码执行此操作。

1 个答案:

答案 0 :(得分:1)

可移植代码应该使用list参数(drop shell=True),或者如果需要shell=True,它应该将命令作为字符串传递。

不要使用../等相对路径:传递绝对路径(包括文件扩展名)或依赖PATH envvar并使用类似:program = 'engine'的内容。