[英]How to end a thread running as os.system() call (Python)
我當前正在處理的項目可用於多個os.system()調用。 我正在努力增加在后台運行這些調用的能力。 這將啟動一個新線程,調用os.system()並將所有輸出重定向到/ dev / null。
問題是我想不出一種結束這些線程的最佳方法。 當我在運行os.system()調用的線程上調用.join()時,系統調用僅接管了主線程。 我希望用戶能夠終止這些線程。
我的解決方案是啟動一個線程,然后讓該線程在另一個線程中啟動os.system()調用。 第一個子線程將連續檢查True / False值。 但是后來我遇到了第一個子線程終止第二個子線程的問題,因此核心問題仍然存在。
這是我的代碼現在的樣子的模型:
import threading
import os
def a():
os.system('ping www.stackoverflow.com > /dev/null')
threads = []
threads.append(threading.Thread(target=a))
threads[0].start()
#Continue doing other stuff
這里的問題是我無法提出一種穩定的方法來停止這些線程。
聽起來您可以使用守護程序,當所有其他非守護程序線程關閉時,守護程序將自動停止。
for job in jobs_to_start:
threads.append(threading.Thread(target=job))
threads[-1].setDaemon(True)
threads[-1].start()
您的主線程被os.system
調用“接管了”,因為thread.join
正是這樣做的:等待直到線程完成,而您的線程不會。
如果這不會為你工作,有一個很好的答案在這里 ,展示了如何使用subprocess.Popen
來進行系統調用,並使用其停止terminate
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.