Различия

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

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

Предыдущая версия справа и слева Предыдущая версия
mpext [2023/03/21 12:00]
root
mpext [2023/03/21 12:26] (текущий)
root
Строка 35: Строка 35:
 import os import os
  
-ret = os.system("ls -la") +ret = os.system("dir") 
-Программа ждет завершения команды +ret - код завершения программы 
-вызванной через os.system +0 - успешно, иначе ошибка
- +
-# Код возврата ret+
 </sxh> </sxh>
 +
 +Вызов блокирующий - программа ждет завершения команды вызванной через ''os.system''.
  
 </div><div slide> </div><div slide>
  
-==== Запуск без ожидания завершения ==== +==== Запуск с получением вывода ====
- +
-Метод ''subprocess.Popen'' по умолчанию запускает процесс без ожидания завершения:+
  
 <sxh python> <sxh python>
 import subprocess import subprocess
  
-subprocess.Popen(["long_time_process"])+output = subprocess.check_output('ping 127.0.0.1 -n 6', encoding="cp866"
 + 
 +print(output)
 </sxh> </sxh>
 +
 +Вызов блокирующий - программа ждет завершения команды вызванной через ''subprocess.check_output''.
  
 </div><div slide> </div><div slide>
  
-==== Запуск с получением вывода ====+==== Запуск без ожидания завершения ==== 
 + 
 +Метод ''subprocess.Popen'' по умолчанию запускает процесс без ожидания завершения:
  
 <sxh python> <sxh python>
 import subprocess import subprocess
  
-(exitcode, output) = subprocess.getstatusoutput('ls /bin/ls')+= 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> </sxh>
  
Строка 69: Строка 78:
  
   * Если вы нажимаете Ctrl-C пока внешняя программа запущена через os.system, то этот сигнал уйдет ей, а не Python.   * Если вы нажимаете Ctrl-C пока внешняя программа запущена через os.system, то этот сигнал уйдет ей, а не Python.
-  * Можно взаимодействовать с интерактивными консольными приложениями пока те запущеныно это не просто.+  * Можно взаимодействовать с интерактивными консольными приложениями пока те запущены через ''Popen''. В частности их можно принудительно завершить или прочитать вывод до завершения самой программы.
   * Большинство приложений с графическим интерфейсом в качестве первого и единственного аргумента принимают имя файла, который должен быть в них открыт.   * Большинство приложений с графическим интерфейсом в качестве первого и единственного аргумента принимают имя файла, который должен быть в них открыт.
-  * Выполнить принудительное завершение запущенной внешней программы можно только в случае, если она запущена через ''Popen''. 
  
 </div> </div>