0

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

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

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

谢谢!!

4

3 回答 3

0

由于这是家庭作业,因此这里是要做的而不是完整的解决方案:

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

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

  3. 等到子进程完成(请参阅 参考资料Popen.wait)。

  4. 等到线程完成对输出的处理(请参阅 参考资料Thread.join)。请注意,这很可能子流程完成后发生。

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

于 2012-09-17T14:18:23.997 回答
0

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

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

于 2012-09-17T14:21:15.633 回答
0

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

for line in pexpect.spawn('command arg1 arg2'):
    print line
于 2012-09-17T14:51:29.687 回答