5秒後にsub.pyからsubprocessを使ってカウントを停止させる方法
cnt.py
を実行している Python プロセスの stdin
へ sub.py
から文字列を出力する方法もあるかと思います。cnt.py
側では stdin
への入力を別スレッドで待ちます。
※ カウントアップの状況が判らないので、cnt.py
を実行している Python プロセスの stdout
を sub.py
側の stdout
にリダイレクトしています
sub.py
python
1import subprocess
2import sys
3import threading
4
5p = subprocess.Popen(['python', 'cnt.py'],
6 stdin=subprocess.PIPE, stdout=sys.stdout, stderr=subprocess.PIPE,
7 encoding='utf-8')
8
9# send stop command after 5 seconds
10t = threading.Timer(5, lambda: p.stdin.write('stop\n'))
11t.start()
12t.join()
13print('stopped.')
cnt.py
python
1import sys
2import threading
3import time
4
5def stop():
6 global is_start
7 is_start = False
8
9def read_command():
10 cmd = sys.stdin.readline().rstrip()
11 if cmd == 'stop': stop()
12
13if __name__ == '__main__':
14 is_start = True
15 cnt = 1
16
17 thread = threading.Thread(target=read_command)
18 thread.start()
19
20 while is_start:
21 print(cnt)
22 time.sleep(1)
23 cnt += 1
24
25 thread.join()
実行結果
bash
1$ python sub.py
21
32
43
54
65
7stopped.
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。