Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Следующая версия
Предыдущая версия
mpext [2023/03/21 11:55]
root создано
mpext [2023/03/21 12:26] (текущий)
root
Строка 1: Строка 1:
 +<div slide>
 +
 ====== Многопоточное программирование и вызов внешних программ ====== ====== Многопоточное программирование и вызов внешних программ ======
  
Строка 22: Строка 24:
 print(results) print(results)
 </sxh> </sxh>
 +
 +</div><div slide>
 +===== Исполнение внешних программ =====
 +
 +==== Запуск с ожиданием завершения ====
 +
 +Простейший метод запуска программы метод ''os.system'':
 +
 +<sxh python>
 +import os
 +
 +ret = os.system("dir")
 +# ret - код завершения программы
 +# 0 - успешно, иначе ошибка
 +</sxh>
 +
 +Вызов блокирующий - программа ждет завершения команды вызванной через ''os.system''.
 +
 +</div><div slide>
 +
 +==== Запуск с получением вывода ====
 +
 +<sxh python>
 +import subprocess
 +
 +output = subprocess.check_output('ping 127.0.0.1 -n 6', encoding="cp866")
 +
 +print(output)
 +</sxh>
 +
 +Вызов блокирующий - программа ждет завершения команды вызванной через ''subprocess.check_output''.
 +
 +</div><div slide>
 +
 +==== Запуск без ожидания завершения ====
 +
 +Метод ''subprocess.Popen'' по умолчанию запускает процесс без ожидания завершения:
 +
 +<sxh python>
 +import subprocess
 +
 +q = subprocess.Popen("ping 127.0.0.1 -n 6", shell=True)
 +
 +while q.poll() is None:
 +    print('waiting...')
 +    sleep(1)
 + 
 +print("Finished with code", q.poll())
 +</sxh>
 +
 +</div><div slide>
 +==== Что еще нужно знать о запуске внешних программ ====
 +
 +  * Если вы нажимаете Ctrl-C пока внешняя программа запущена через os.system, то этот сигнал уйдет ей, а не Python.
 +  * Можно взаимодействовать с интерактивными консольными приложениями пока те запущены через ''Popen''. В частности их можно принудительно завершить или прочитать вывод до завершения самой программы.
 +  * Большинство приложений с графическим интерфейсом в качестве первого и единственного аргумента принимают имя файла, который должен быть в них открыт.
 +
 +</div>
 +