我试图使用subprocess.call从python调用进程,如下所示:
from subprocess import call
exePath = 'C:\\Test\\EXE.exe'
inPath = 'C:\\Test\\IN.in'
outPath = 'C:\\Test\\OUT.out'
call([exePath, inPath, outPath])
这会从EXE.exe打印几行,然后是"句柄无效" - 但是作为一个字符串,而不是一个错误,这让我觉得它可能是来自EXE.exe的消息:
Unzipping Solution...
0.0% The handle is invalid.
但是当我打开cmd.exe并粘贴时:
C:\Test\EXE.exe C:\Test\IN.in C:\Test\OUT.out
它工作正常。
有人能指出我正确的方向吗?
谢谢!
我在Windows 7上运行Python 2.7 64位。
修改
现在看起来像PyDev中的问题,控制台无法处理来自进程覆盖行的stdout。 IDLE的代码运行良好。仍在寻找PyDev的修复......
答案 0 :(得分:3)
我认为你有这个问题,因为PyDev不是一个真正的终端(即:在Python中,os.isatty()从PyDev运行时会返回False。)
如果exe真的依赖于终端,那么目前PyDev可以做的并不多......
目前,您可以通过Python进行调用:
在Windows中:
popen = subprocess.Popen(['myexe', 'params'], creationflags=subprocess.CREATE_NEW_CONSOLE)
popen.wait()
在Linux中(由于CREATE_NEW_CONSOLE不可用):
args = ['xterm', '-e'] + ['myexe', 'params']
popen = subprocess.Popen(args)
popen.wait()
这样无论谁在调用它都能正常工作:)
我认为Aptana Studio确实有一个实际的终端更换,但没有PyDev集成来启动它...