Команда Python popen. Подождите, пока команда не будет завершена
У меня есть скрипт, где я запускаю с popen команду оболочки. Проблема в том, что сценарий не ждет, пока эта команда popen не будет завершена, и go сразу же продолжится.
om_points = os.popen(command, "w")
.....
Как я могу сказать моему скрипту Python подождать, пока команда оболочки не закончится?
4 ответа:
в зависимости от того, как вы хотите работать ваш скрипт у вас есть два варианта. Если вы хотите, чтобы команды блокировались и ничего не делали во время выполнения, вы можете просто использовать
subprocess.call
.#start and block until done subprocess.call([data["om_points"], ">", diz['d']+"/points.xml"])
если вы хотите делать что-то во время выполнения или кормить вещи в
stdin
, вы можете использоватьcommunicate
послеpopen
звонок.#start and process things, then wait p = subprocess.Popen([data["om_points"], ">", diz['d']+"/points.xml"]) print "Happens while running" p.communicate() #now wait plus that you can send commands to process
как указано в документации,
wait
может тупик, так что общаться желательно.
можно использовать
subprocess
для достижения этой цели.import subprocess #This command could have multiple commands separated by a new line \n some_command = "export PATH=$PATH://server.sample.mo/app/bin \n customupload abc.txt" p = subprocess.Popen(some_command, stdout=subprocess.PIPE, shell=True) (output, err) = p.communicate() #This makes the wait possible p_status = p.wait() #This will give you the output of the command being executed print "Command output: " + output
то, что вы ищете-это
wait
метод.