Python subprocess 写入新行到 stdin 直到进程结束

3

我创建了一个子进程,使用了

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

该命令会打印各种信息,然后等待\n键的按下才会继续打印更多信息。最终,当\n被按下足够多次时,该过程将结束。我需要能够编程模拟按下\n直到进程结束,并捕获所有输出。我不想将输出打印到终端上,而是希望将其返回并设置为变量。
您可以如何实现此功能?

换行符号数量是否是一个常量?还是会在不同的运行时改变? - Amber
使用popen或popen2已经被弃用。请使用subprocess模块 - 它会为您提供一个统一的接口和流来读/写数据。 - Sean McSomething
@SeanMcSomething,原帖中确实使用了subprocess - Amber
1
@Nathaniel 还有一个需要检查的事情 - 当通过 subprocess 调用而不是直接运行时,它是否实际上会进行换行提示?很多“分页”的命令行程序在直接调用时并没有使用分页,而只有在终端中调用才使用。 - Amber
我还不确定。 - Nate Higgins
2个回答

2
如果您只需要一次性向stdin写入,可以使用:
proc = subprocess.Popen(..., stdin = subprocess.PIPE)
proc.stdin.write('\n')

然而,如果你需要等待提示或以更复杂的方式与子进程交互,则使用 pexpect。 (pexpect 可与任何 POSIX 系统或安装有 Cygwin 的 Windows 系统一起使用。)


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接