fork download
  1. import subprocess
  2.  
  3.  
  4. ### Способ 1, ебанутый
  5. # запускаем субпроцесс
  6. proc = subprocess.Popen('MY_GLORIOUS_EXECUTABLE',
  7. stdin=subprocess.PIPE,
  8. stdout=subprocess.PIPE,
  9. stderr=subprocess.STDOUT) # ошибки тоже в stdout
  10.  
  11. # пока процесс не завершился
  12. while proc.poll() is None:
  13. # читаем его stdout по одной строке
  14. output = proc.stdout.readline()
  15. print(output)
  16. # пишем в его stdin
  17. proc.stdin.write()
  18.  
  19. ### Способ 2, припизднутый
  20. pipe = os.pipe()
  21. # запускаем субпроцесс 1
  22. proc1 = subprocess.Popen('MY_GLORIOUS_EXECUTABLE1',
  23. stdin=subprocess.PIPE,
  24. stdout=pipe,
  25. stderr=subprocess.STDOUT)
  26. # запускаем субпроцесс 2
  27. proc2 = subprocess.Popen(['python', 'ololo.py'],
  28. stdin=pipe,
  29. stdout=proc1.stdin,
  30. stderr=subprocess.STDOUT)
  31. # пайпы proc1 и proc2 замкнуты друг на друга
  32. # ждем пока процессы не завершатся
  33. proc1.wait()
  34. proc2.wait()
  35.  
  36. ### Способ 3, socket + select
  37. # Тут больше чем 2-3 строчки кода. Гугли python non-blocking sockets, python select.select
  38. # Плюсом будет возможность запускать скрипты на разных машинах.
  39.  
  40. ### Способ 4, asyncio AbstractEventLoop.subprocess_exec
  41. # Самый модный и молодежный способ. Требует знания asyncio
  42.  
Success #stdin #stdout 0.02s 10720KB
stdin
Standard input is empty
stdout
b'prog\n'
b''