我正在使用下面的代码来运行 unix 命令:
cmd = 'ls -l'
(status,output) = commands.getstatusoutput(cmd)
print output
但问题是它仅在命令完成后才显示输出,但我想在执行过程中看到打印的输出。
ls -l
只是虚拟命令,我在实际程序中使用了一些复杂的命令。
谢谢!!
由于这是家庭作业,因此这里是要做的而不是完整的解决方案:
使用subprocess.Popen
类来调用可执行文件。请注意,构造函数采用命名stdout
参数,并查看subprocess.PIPE
.
在单独的线程中从对象的 STDOUT 管道读取Popen
以避免死锁。请参阅threading
模块。
等到子进程完成(请参阅 参考资料Popen.wait
)。
等到线程完成对输出的处理(请参阅 参考资料Thread.join
)。请注意,这很可能在子流程完成后发生。
如果您需要更多帮助,请描述您的确切问题。
大多数程序如果没有连接到 tty 将使用块缓冲输出,因此您需要运行连接到 pty 的程序;最简单的方法是使用pexpect:
for line in pexpect.spawn('command arg1 arg2'):
print line