从python中运行unix命令获取实时输出

从python中运行unix命令获取实时输出,python,shell,Python,Shell,我使用以下代码运行unix命令: cmd = 'ls -l' (status,output) = commands.getstatusoutput(cmd) print output 但问题是,它仅在命令完成后显示输出,但我希望看到随着执行的进行打印输出。 ls-l只是一个伪命令,我在实际程序中使用了一些复杂的命令 谢谢 因为这是家庭作业,下面是要做的事情,而不是完整的解决方案: 使用subprocess.Popen类调用可执行文件。请注意,构造函数使用一个命名的stdout参数,并查看sub

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

cmd = 'ls -l'
(status,output) = commands.getstatusoutput(cmd)
print output
但问题是,它仅在命令完成后显示输出,但我希望看到随着执行的进行打印输出。
ls-l
只是一个伪命令,我在实际程序中使用了一些复杂的命令


谢谢

因为这是家庭作业,下面是要做的事情,而不是完整的解决方案:

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

  • 在单独的线程中读取
    Popen
    对象的标准管道,以避免死锁。请参阅
    线程化
    模块

  • 等待子流程完成(请参阅
    Popen.Wait

  • 等待线程处理完输出(请参阅
    thread.join
    )。请注意,这很可能在子流程完成后发生


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

    除非Python中有我不知道的更简单的方法,否则我相信您将不得不深入研究稍微复杂一些的函数


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

    如果未连接到tty,大多数程序将使用块缓冲输出,因此您需要运行连接到pty的程序;最简单的方法是使用

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