Python子进程将新行写入stdin,直到进程结束

Python子进程将新行写入stdin,直到进程结束,python,shell,subprocess,Python,Shell,Subprocess,我已经使用创建了一个子流程 subprocess.Popen(shlex.split(command), stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 它调用的命令将打印各种信息,然后在打印更多信息之前等待\n。最后,当按下\n足够多次时,该过程将结束。我需要能够通过编程模拟按下\n直到过程结束,并捕获所有输出。我不希望输出打印到终端。我希望它被返回并设置为变量 我该怎么做呢?如果您只需向stdin

我已经使用创建了一个子流程

subprocess.Popen(shlex.split(command), stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
它调用的命令将打印各种信息,然后在打印更多信息之前等待
\n
。最后,当按下
\n
足够多次时,该过程将结束。我需要能够通过编程模拟按下
\n
直到过程结束,并捕获所有输出。我不希望输出打印到终端。我希望它被返回并设置为变量


我该怎么做呢?

如果您只需向stdin写入一次,您可以使用

proc = subprocess.Popen(..., stdin = subprocess.PIPE)
proc.stdin.write('\n')
但是,如果需要等待提示或以更复杂的方式与子流程交互,则使用。 (pexpect适用于任何POSIX系统,或使用Cygwin的Windows。)

试试这种方法

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

换行的数量是否必须是常数?或者它可以在运行之间更改吗?不推荐使用popen或popen2。使用子流程模块-它为您提供了一个统一的接口和数据流以从中读取/写入数据。@SeanMcSomething er,OP正在使用
子流程
@Nathaniel还需要检查其他一些东西-当通过
子流程
调用时,它是否实际执行换行提示,而不是直接运行它?许多“分页”命令行程序在直接调用而不是从终端调用时实际上并不使用分页。我还不确定。