У меня есть сценарий, в котором я запускаю команду popen a shell. Проблема в том, что сценарий не дожидается завершения выполнения этой команды popen и сразу же продолжает работу.
om_points = os.popen(command, "w")
.....
Как я могу сказать своему скрипту Python дождаться завершения команды оболочки?
python
subprocess
wait
popen
Мишель
источник
источник
subprocess.run()
был добавлен в Python 3.5 и представляет собой «Рекомендуемый подход кВы можете использовать
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
источник
Принудительно
popen
не продолжать, пока не будет прочитан весь вывод, выполнив:источник
Пусть команда, которую вы пытаетесь передать, будет
os.system('x')
затем вы превращаете это в заявление
t = os.system('x')
теперь питон будет ждать вывода из командной строки, чтобы его можно было присвоить переменной
t
.источник
Вы ищете
wait
метод.источник
wait
это методsubprocess
класса.wait () отлично работает для меня. Подпроцессы p1, p2 и p3 выполняются одновременно. Следовательно, все процессы выполняются через 3 секунды.
import subprocess processes = [] p1 = subprocess.Popen("sleep 3", stdout=subprocess.PIPE, shell=True) p2 = subprocess.Popen("sleep 3", stdout=subprocess.PIPE, shell=True) p3 = subprocess.Popen("sleep 3", stdout=subprocess.PIPE, shell=True) processes.append(p1) processes.append(p2) processes.append(p3) for p in processes: if p.wait() != 0: print("There was an error") print("all processed finished")
источник
Я думаю, что process.communicate () подойдет для вывода небольшого размера. Для большей производительности это не лучший подход.
источник