Randolp
Randolp

Reputation: 25

How do I pause other processes when user input / confirmation is required Subprocess Python

If I have a script (process run.py) that will run 3 subprocesses A.py, B.py, C.py (3 scripts called at same time through process run.py).

p= subprocess.Popen(['python3', '-u', 'A.py'])
p2 = subprocess.Popen(['python3', '-u', 'B.py'])
p3 = subprocess.Popen(['python3', '-u', 'C.py'])

The operation is fine. However say in b.py i have a line such as

reply = input( do you want to continue this action y/n :)
if reply.lower == 'yes':
take this action()
elif reply.lower == 'no' :
take other action()

(pref) How can i get subprocess of A.py and c.py to wait/pause for 5seconds, in order for user to enter y or no or wait in order for user to enter y or no

A basic confirm prompt in terminal. However the problem I face is A.py B.py running not allowing the confirmation which would start a different task/process/script.

Guidance here would be warmly welcomed.

Upvotes: 0

Views: 226

Answers (1)

Sergio Lema
Sergio Lema

Reputation: 1629

You must use an external system to let the processes communicate between them.

The external system can be as simple as writing in a file some codes and having all the processes checking the state of the files.

B.py

with open("my.lock", "w") as f:
    f.write("a")
reply = input( do you want to continue this action y/n :)
if reply.lower == 'yes':
take this action()
elif reply.lower == 'no' :
take other action()
os.remove("my.lock")

A.py or C.py

import os
import time

while os.path.isfile("my.lock"):
   time.spleep(1)
# then your logic

A more sophisticated solution would be to have a message broker (RabbitMQ, Kafka...).

Upvotes: 1

Related Questions