通过在python中运行unix命令获取实时输出

时间:2012-09-17 13:53:05

标签: python shell

我使用下面的代码运行unix命令:

cmd = 'ls -l'
(status,output) = commands.getstatusoutput(cmd)
print output

但问题是它只在命令完成后显示输出,但我希望看到输出在执行过程中打印出来。 ls -l只是虚拟命令,我在实际程序中使用了一些复杂的命令。

谢谢!

3 个答案:

答案 0 :(得分:0)

由于这是作业,这里是做什么而不是完整的解决方案:

  1. 使用subprocess.Popen类调用可执行文件。请注意,构造函数采用命名的stdout参数,并查看subprocess.PIPE

  2. 在单独的线程中从Popen对象的STDOUT管道中读取,以避免死锁。请参阅threading模块。

  3. 等到子流程完成后(参见Popen.wait)。

  4. 等到线程处理完输出后(参见Thread.join)。请注意,在子进程完成后,很可能会发生这种情况。

  5. 如果您需要更多帮助,请描述您的确切问题。

答案 1 :(得分:0)

除非Python中有更简单的方法我不知道,我相信你必须深入研究稍微复杂的os.forkos.pipe函数。

基本上,我们的想法是分叉您的进程,让子进程执行您的命令,同时将其标准输出重定向到将由父进程读取的管道。你很容易找到examples这种模式。

答案 2 :(得分:0)

如果大多数程序没有连接到tty,它们将使用块缓冲输出,因此你需要运行连接到pty的程序;最简单的方法是使用pexpect:

for line in pexpect.spawn('command arg1 arg2'):
    print line