我使用
创建了一个子流程subprocess.Popen(shlex.split(command), stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
它调用的命令将打印各种信息,然后在打印更多信息之前等待\n
。最终,当\n
被按下足够次时,该过程将结束。我需要能够以编程方式模拟\n
的按下直到进程结束,以及捕获所有输出。我不希望输出打印到终端。我希望它被返回并设置为变量。
我该怎么做?
答案 0 :(得分:1)
如果您只需要写一次stdin
,就可以使用
proc = subprocess.Popen(..., stdin = subprocess.PIPE)
proc.stdin.write('\n')
但是,如果您需要等待提示或以更复杂的方式与子流程交互,请使用pexpect。 (pexpect适用于任何POSIX系统,或适用于Cygwin的Windows。)
答案 1 :(得分: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