Я пытаюсь научиться писать сценарий control.py
, который запускает другой скрипт test.py
в цикле для определенного количества раз в каждом прогоне, считывает его вывод и останавливает его, если некоторые предопределенные вывод печатается (например, текст «останавливается сейчас»), и цикл продолжает свою итерацию (как только test.py
закончил, либо самостоятельно, либо силой). Так что-то вдоль линий:Управление скриптом python из другого сценария
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 для управления другим, как он работает. (например, доступ к тому, что он печатает и т. д.).
- И, наконец, можно ли запустить
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
'os.system' устарел; вы должны использовать модуль 'subprocess' – jmetz
для запуска test.py в новом терминале, вам необходимо запустить этот процесс, например. 'subprocess.call ([" xterm "," -e "," python "," test.py "," someargument "])' – jmetz
Возможно, вас заинтересует [pexpect] (https://pypi.python.org/PyPI/pexpect /). – zondo