如何在Python中从管道命令获得交互式输出?
我目前有这段代码,whcih工作并产生您期望的输出,即如果您要从终端运行“ls-ltr | less”,则输出行的列表如何在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'
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
之类的方法来处理这类事情(尽管我自己从未使用过)。