簡體   English   中英

如何結束以os.system()調用運行的線程(Python)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM