Я знаю, что на этот вопрос был дан ответ перед этим Python popen command. Wait until the command is finished , но я не понимаю ответа и как я могу применить его к моему коду, поэтому, пожалуйста, не помещайте этот вопрос как прошу заранее, не помогая пожалуйста :)Команда Python popen shell ждет завершения подпроцесса
У меня есть функция, которая принимает команду оболочки и выполняет ее и возвращает переменные выходы.
Он отлично работает, за исключением того, что я не хочу, чтобы поток управления продолжался до полного завершения процесса. Причина этого в том, что я создаю образы с помощью инструмента командной строки 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 Это то, что я использовал, чтобы закончить ее так, она возвращает выходные правильно.
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))
Почему 'os.popen', а не' subprocess.popen'? Подпроцесс заменяет os.popen. И я думаю, вы хотите сделать это: 'description.communicate()' ждать, пока он не будет закончен. См. Https://docs.python.org/2/library/subprocess.html#subprocess.Popen.communicate – Noxeus
Итак, как мне написать? как это ... description = subprocess.call ([shell_command]) – whoopididoo
См. мой ответ .. – Noxeus