3

我使用创建了一个子流程

subprocess.Popen(shlex.split(command), stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

\n它调用的命令会打印各种信息,然后在打印更多信息之前等待。最终,当\n按下足够的次数时,该过程将结束。我需要能够以编程方式模拟按下\n直到进程结束,以及捕获所有输出。我不希望将输出打印到终端。我希望它被返回并设置为一个变量。

我该怎么做?

4

2 回答 2

2

如果你只需要写stdin一次,你可以使用

proc = subprocess.Popen(..., stdin = subprocess.PIPE)
proc.stdin.write('\n')

但是,如果您需要等待提示或以更复杂的方式与子进程交互,请使用pexpect。(pexpect 适用于任何 POSIX 系统,或带有 Cygwin 的 Windows。)

于 2013-02-27T18:23:57.667 回答
0

试试这个方法

from subprocess import Popen, PIPE
import shlex
with open (filename, 'w') as fileHandle
proc = Popen(shlex.split(command), stdin = PIPE, stdout = PIPE, stderr  = PIPE)
out, err = proc.communicate(input = '\n')
print out, err
于 2013-02-27T19:45:18.707 回答