Как я могу приостановить / продолжить сценарий поведения Python - PullRequest
0 голосов
/ 26 сентября 2019

Я пытаюсь реализовать проверку сообщений в мессенджере.Для этого я запускаю script_1, в котором отправляю сообщение.Затем в этом сценарии я хочу вызвать script_2.Script_2 позволит мне войти в мое приложение как другой пользователь и прочитать это сообщение.Но в то же время мне нужно, чтобы script_1 сделал паузу во время работы script_2.Как я могу сделать это в Python или вести себя?

Я пишу в script_2.

p = subprocess.Popen("gnome-terminal -- behave features/{0}".format(feature_name), shell=True)
    p.send_signal(signal=signal.pause())

и действительно, тогда script_1 приостанавливается.Но я не знаю.как продолжить script_1.когда script_2 завершает

Ответы [ 2 ]

1 голос
/ 26 сентября 2019

Немного поздно, я знаю, но следующее демонстрирует, что @Sima говорит, что p.send_signal(signal.SIGCONT) запустит приостановленный процесс.

ОБНОВЛЕНИЕ: основываясь на комментариях, я понимаю, что вам нужно заставить script_1 (отправить сообщение) дождаться завершения script_2 (вход в систему), прежде чем продолжить.Процесс 1, приведенный ниже, представляет собой скрипт Python, который будет отправлять сообщение, а процесс 2 - это процесс входа в систему:

import subprocess
import signal
import time

print("Starting")
p = subprocess.Popen("""
for i in `seq 1 12`;
do
    echo $i;
    sleep 1;
done
""", shell=True)

# Your script_1 controlling script_2 here
print("Process 1: Sleeping")
time.sleep(3)

print("Process 2: Pausing")
p.send_signal(signal.SIGTSTP)

print("Process 1: Sleeping")
time.sleep(3)

print("Process 2: Starting (continue)")
p.send_signal(signal.SIGCONT)

# Your script_1 waiting for script_2 to complete in order to continue
print("Process 1: Waiting on 2 to finish")
time.sleep(3)

# Code from https://stackoverflow.com/q/36596354/3727050
while p.poll() is None:
    # Process hasn't exited yet, let's wait some
    time.sleep(0.5)
    print("Process 1: still waiting...")

print("Process 1 got process 2 exit code: {}".format(p.returncode))
print("Here only Process 1 is running")

Вывод:

$ python ~/tmp/tests.py
Starting
Process 1: Sleeping
1
2
3
Process 2: Pausing
Process 1: Sleeping
Process 2: Starting (continue)
Process 1: Waiting on 2 to finish
4
5
6
7
Process 1: still waiting...
Process 1: still waiting...
8
Process 1: still waiting...
Process 1: still waiting...
9
Process 1: still waiting...
Process 1: still waiting...
10
Process 1: still waiting...
Process 1: still waiting...
11
Process 1: still waiting...
Process 1: still waiting...
12
Process 1: still waiting...
Process 1: still waiting...
Process 1: still waiting...
Process 1 got process 2 exit code: 0
Here only Process 1 is running

Обратите внимание, что из exit-Код сценария 2 вы должны быть в состоянии определить, если вход был успешным.Код возврата 0 - успех, все остальное - сбой

1 голос
/ 26 сентября 2019

Вы можете отправить сигнал продолжения, когда хотите, например, в конце script_2.

p.send_signal(signal.SIGSTOP)
"""do what you want"""
p.send_signal(signal.SIGCONT)
...