Python popen shell 命令等到子进程完成

Python popen shell command wait till subprocess has finished

我知道这个问题已经在这里回答过 Python popen command. Wait until the command is finished 但问题是我不明白答案以及如何将它应用到我的代码中所以请不要在没有一点帮助的情况下将这个问题标记为之前被问过的问题:)

我有一个接收 shell 命令并执行它和 returns 变量输出的函数。

它工作正常,除了我不希望控制流继续直到该过程完全完成。这样做的原因是我正在使用 imagemagick 命令行工具创建图像,当我尝试访问它们以获取信息时不久之后它们是不完整的。这是我的代码..

def send_to_imagemagick(self, shell_command):

    try:
        # log.info('Shell command = {0}'.format(shell_command))
        description=os.popen(shell_command)
        # log.info('description = {0}'.format(description))            
    except Exception as e:
        log.info('Error with Img cmd tool {0}'.format(e))

    while True:
        line = description.readline()
        if not line: break
        return line

非常感谢@Ruben 这就是我用来完成它的方法,所以它 returns 输出正确。

 def send_to_imagemagick(self, shell_command):

        args = shell_command.split(' ')    
        try:                
            description=Popen(args, stdout=subprocess.PIPE)
            out, err = description.communicate()
            return out

        except Exception as e:
            log.info('Error with Img cmd tool {0}'.format(e))

使用subprocess.popen:

This module intends to replace several older modules and functions.

所以在你的情况下 import subprocess 然后使用 popen.communicate() 等待命令完成。

有关这方面的文档,请参阅:here

所以:

from subprocess import Popen

def send_to_imagemagick(self, shell_command):

    try:
        # log.info('Shell command = {0}'.format(shell_command))
        description=Popen(shell_command)
        description.communicate()

        # log.info('description = {0}'.format(description))            
    except Exception as e:
        log.info('Error with Img cmd tool {0}'.format(e))

    while True:
        line = description.readline()
        if not line: break
        return line