Я пытаюсь научиться писать script control.py
, который запускает еще один script test.py
в цикле определенное количество раз, в каждом прогоне читает его вывод и останавливает его, если некоторые печатается предопределенный вывод (например, текст "останавливается сейчас" ), и цикл продолжает свою итерацию (один раз test.py
закончил, либо самостоятельно, либо силой). Итак, что-то вроде строк:
for i in range(n):
os.system('test.py someargument')
if output == 'stop now': #stop the current test.py process and continue with next iteration
#output here is supposed to contain what test.py prints
- Проблема с вышеизложенным заключается в том, что он не проверяет вывод
test.py
по мере его запуска, а ожидает, что процессtest.py
завершится сам по себе, правильно? - В основном пытается узнать, как я могу использовать python script для управления другим, когда он запущен. (например, доступ к тому, что он печатает и т.д.).
- Наконец, можно ли запустить
test.py
в новом терминале (т.е. не в терминалеcontrol.py
) и все еще достичь вышеуказанных целей?
Попытка:
test.py
:
from itertools import permutations
import random as random
perms = [''.join(p) for p in permutations('stop')]
for i in range(1000000):
rand_ind = random.randrange(0,len(perms))
print perms[rand_ind]
И control.py
: (следуя предложению Марка)
import subprocess
command = ["python", "test.py"]
n = 10
for i in range(n):
p = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
while True:
output = p.stdout.readline().strip()
print output
#if output == '' and p.poll() is not None:
# break
if output == 'stop':
print 'sucess'
p.kill()
break
#Do whatever you want
#rc = p.poll() #Exit Code