2

我正在尝试使用 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 中的一个问题,其中控制台无法处理来自进程覆盖行的标准输出。代码在 IDLE 中运行良好。仍在寻找 PyDev 的修复程序...

4

1 回答 1

3

我认为您遇到此问题是因为 PyDev 不是真正的终端(即:在 Python 中,从 PyDev 运行时 os.isatty() 将返回 False)。

如果 exe 真的依赖于终端,那么目前 PyDev 能做的并不多……

现在,您可以从 Python 调用:

在窗口中:

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 集成来启动它......

于 2012-04-20T11:26:27.107 回答