我有一个奇怪的问题,我似乎无法解决
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版本。
我需要一种方法在两个平台上使用相同的代码执行此操作。
答案 0 :(得分:1)
可移植代码应该使用list参数(drop shell=True
),或者如果需要shell=True
,它应该将命令作为字符串传递。
不要使用../
等相对路径:传递绝对路径(包括文件扩展名)或依赖PATH
envvar并使用类似:program = 'engine'
的内容。