程序仍在运行,即使我用
我试图运行一个python文件与另一个python文件在线程与子进程。我可以运行这个文件,但是不能停止它。
我想要的是
我想运行
test.py
和我的main.py
在线程,并通过在控制台中输入stop
来停止它。
test.py
import time
while True:
print("Hello from test.py")
time.sleep(5)
main.py
import subprocess
import _thread
processes = []
def add_process(file_name):
p = subprocess.Popen(["python", file_name], shell=True)
processes.append(p)
print("Waiting the process...")
p.wait()
while True:
try:
# user input
ui = input("> ")
if ui == "start":
_thread.start_new_thread(add_process, ("test.py",))
print("Process started.")
elif ui == "stop":
if len(processes) > 0:
processes[-1].kill()
print("Process killed.")
else:
pass
except KeyboardInterrupt:
print("Exiting Program!")
break
输出C:usersme>python main2.py
> start
Process started.
> Waiting the process...
Hello from test.py, after 0 seconds
Hello from test.py, after 4 seconds
> stop
Process killed.
> Hello from test.py, after 8 seconds
Hello from test.py, after 12 seconds
> stopHello from test.py, after 16 seconds
Process killed.
> Hello from test.py, after 20 seconds
>
程序仍在运行,即使我用kill
函数停止它,我也尝试过terminate
。我需要停止它,我怎么能。或者,是否有任何替代模块的子进程来做这个?
我怀疑您刚刚启动了多个进程。如果您将停止代码替换为以下代码:
for proc in processes:
proc.kill()
这应该把他们都杀了。
注意你是在windows上,在windows上terminate()
是kill()
的别名。无论如何,依靠无优雅地终止进程不是一个好主意,如果你需要停止你的test.py
,你最好有一些与它通信的方法,让它优雅地退出。
顺便说一句,你不需要shell=True
,threading
比_thread
更好。