如何在Python中从管道命令获得交互式输出?

如何在Python中从管道命令获得交互式输出?,python,popen,interactive,Python,Popen,Interactive,我目前有这段代码,whcih工作并产生您期望的输出,即如果您要从终端运行“ls-ltr | less”,则输出行的列表 p1 = subprocess.Popen(shlex.split('ls -ltr'), stdout=subprocess.PIPE, stderr=subprocess.PIPE) p2 = subprocess.Popen(shlex.split('less'

我目前有这段代码,whcih工作并产生您期望的输出,即如果您要从终端运行“ls-ltr | less”,则输出行的列表

p1 = subprocess.Popen(shlex.split('ls -ltr'), stdout=subprocess.PIPE,
                                                        stderr=subprocess.PIPE)
p2 = subprocess.Popen(shlex.split('less'), stdin=p1.stdout,
                               stdout=subprocess.PIPE, stderr=subprocess.PIPE)
print p2.communicate()

有没有一种方法可以使用subprocess.Popen或其他任何东西来获得交互式输出,您可以像直接从终端运行命令一样滚动并输入键盘命令?

如果Python进程有自己的stdout连接到终端,那么这就是

p1 = subprocess.Popen(shlex.split('ls -ltr'), stdout=subprocess.PIPE,
                                              stderr=subprocess.PIPE)
p2 = subprocess.Popen(shlex.split('less'), stdin=p1.stdout)

i、 e.不要重定向
less

的输出。我认为人们通常会建议使用
pexpect
之类的方法来处理这类事情(尽管我自己从未使用过)。