【问题标题】:subprocess: PyDev console vs. cmd.exe子进程:PyDev 控制台与 cmd.exe
【发布时间】:2012-05-01 10:48:54
【问题描述】:

我正在尝试使用 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 的修复程序...

【问题讨论】:

  • 在文件路径的任何地方将双 \\ 更改为单个 / 是否有帮助?
  • 不,/ 给出相同的结果。
  • 你能把shell=True加到call()吗
  • 添加 shell=True 也会得到相同的结果。
  • 如果将 in 和 out 文件合并到一个 arg 中会发生什么:call([exePath, '%s %s' % (inPath, outPath)])

标签: python cmd subprocess pydev


【解决方案1】:

我认为您遇到此问题是因为 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 集成来启动它...

【讨论】:

  • 这似乎也不起作用。它仍在尝试在 PyDev 的控制台中运行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多