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

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

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

谢谢!!

#1楼 票数:0

由于这是家庭作业,因此这里是代替完整解决方案的处理方法:

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

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

  3. 等待子进程完成(请参阅Popen.wait )。

  4. 等待直到线程完成对输出的处理(请参阅Thread.join )。 注意,这很可能在子过程完成之后发生。

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

#2楼 票数:0

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

基本上,想法是派生您的进程,让孩子执行您的命令,同时将其标准输出重定向到由父级读取的管道。 您将轻松找到这种模式的示例

#3楼 票数:0

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

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

  ask by rajya vardhan translate from so

未解决问题?本站智能推荐:

1回复

子进程命令Python的实时输出状态[重复]

这个问题在这里已经有了答案: 子进程命令的实时输出(17 个回答) 去年关闭。 我正在编写一个脚本来使用 subprocess.check_output 获
1回复

使用Python3的loginshell命令实时输出

我试图获取子流程的输出以提示登录,然后在登录后继续执行脚本的其余部分。我可以获取提示输入登录名的提示,但是输入用户名和密码后出现以下错误: 下面是脚本: 当我正常从外壳执行命令时,登录后不返回任何内容。
3回复

在python中运行时捕获shell脚本的实时输出

我正在编写一个python脚本以ssh进入Linux服务器并执行已经存储在Linux服务器上的Shell脚本。 到目前为止,这是我的代码 第一个问题:我可以通过stderr获取我的shell脚本的输出,但是只有在整个shell脚本执行完毕后才能获取它。 因此,如果shell脚本需要10
17回复

子进程命令的实时输出

我使用 python 脚本作为流体动力学代码的驱动程序。 当需要运行模拟时,我使用subprocess.Popen运行代码,将stdout和stderr的输出收集到subprocess.PIPE ——然后我可以打印(并保存到日志文件)输出信息,并检查是否有任何错误。 问题是,我不知道代码的进展情况。
1回复

子进程命令的实时输出状态错误:已关闭文件Python上的I/o操作

我正在编写一个脚本来使用 subprocess.Popen 获取 netstat 状态。 以上给出了ValueError: I/O operation on closed file。 . 有什么办法可以得到直播输出。 在子进程命令的实时输出中,他们在这里使用了writen 和 readlines
1回复

实时输出重定向

当前,我正在使用以下命令将脚本重定向到日志文件: 这似乎可行,但是只要有打印命令,它就不会立即写入文件。 而是等待直到可以打印一组行。 我希望控制台和日志文件同时写入。 如何使用输出重定向完成此操作。 请注意,在控制台上运行脚本会在应有的时候打印所有内容。 尽管在日志文件上执行ta
3回复

在php中运行带有实时输出的shell命令

我通过php move_uploaded_file函数上传文件,然后将该文件作为Java程序的参数。 当Java程序正在执行时,它将在终端中输出进度。 Java程序的输出是执行相同操作的perl脚本的输入。 我将所有这些都作为shell_exec函数在我的php网站中执行,并在屏幕上打印出
3回复

从Python运行shell命令并实时打印输出

我想编写一个函数,一次执行多个shell命令,并实时打印shell返回的内容。 我目前有以下不打印外壳的代码(我正在使用Windows 10和python 3.6.2): 我如何实时查看外壳返回的内容? 编辑:此问题不是注释中第一个两个链接的重复,它们无助于实时打印。