2012-07-30 36 views
1

我目前有这个代码,它工作并产生你所期望的输出,即如果你运行'ls -ltr |更少'从终端。如何从Python中的管道命令获取交互式输出?

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或其他任何获得交互式输出,您可以通过滚动和键盘输入的方式进入命令,你会如果你直接从终端运行的命令?

+0

我认为人们通常会为这类事情提供类似“pexpect”的东西(尽管我自己从未使用过)。 – mgilson 2012-07-30 12:20:28

回答

2

如果Python进程具有连接到终端自身的标准输出,那么这是

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

即不输出从less重定向。

+0

完美运行,非常感谢您的快速响应。 – user1562862 2012-07-30 12:34:22