我使用下面的代码运行unix命令:
cmd = 'ls -l'
(status,output) = commands.getstatusoutput(cmd)
print output
但问题是它只在命令完成后显示输出,但我希望看到输出在执行过程中打印出来。
ls -l
只是虚拟命令,我在实际程序中使用了一些复杂的命令。
谢谢!
答案 0 :(得分:0)
由于这是作业,这里是做什么而不是完整的解决方案:
使用subprocess.Popen
类调用可执行文件。请注意,构造函数采用命名的stdout
参数,并查看subprocess.PIPE
。
在单独的线程中从Popen
对象的STDOUT管道中读取,以避免死锁。请参阅threading
模块。
等到子流程完成后(参见Popen.wait
)。
等到线程处理完输出后(参见Thread.join
)。请注意,在子进程完成后,很可能会发生这种情况。
如果您需要更多帮助,请描述您的确切问题。
答案 1 :(得分:0)
除非Python中有更简单的方法我不知道,我相信你必须深入研究稍微复杂的os.fork
和os.pipe
函数。
基本上,我们的想法是分叉您的进程,让子进程执行您的命令,同时将其标准输出重定向到将由父进程读取的管道。你很容易找到examples这种模式。
答案 2 :(得分:0)
如果大多数程序没有连接到tty,它们将使用块缓冲输出,因此你需要运行连接到pty的程序;最简单的方法是使用pexpect:
for line in pexpect.spawn('command arg1 arg2'):
print line