首先检查某个Popen是否正在运行(==已分配检查变量)



我在一个函数中得到了一个正在运行的线程p并尝试首先检查是否已经运行

如果p没有运行,它会在分配错误之前抛出引用

from subprocess import check_output,Popen
from asyncio.subprocess import PIPE
from threading import Thread
def th():
p= Popen([r'C:UsersdowDesktopddStructuredOsuMemoryProviderTester.exe'],stdout=PIPE,stderr=PIPE) if p else 0
for line in p.stdout:
line=line.decode('utf-8')
print(line)
while True:
try:
Thread(target=th).start()
//extra codes

我尝试过的

  • p.poll((
    这将以与课程相同的方式获得NameError

  • progs = str(check_output('tasklist'))
    检查p是否不在程序中。

这在每个检查循环上都会出现短暂延迟的短暂弹出黑窗口的问题

如果进程的名称很长,它会剪切其余的名称,所以我认为有点不稳定

检查p是否正在运行==分配的好方法是什么

看起来你想从这个程序中只运行一次exe。要做到这一点,您可以保留一些全局状态,让您知道流程是否已执行。将该状态封装在锁中以避免竞争条件,您的代码可能是:

from subprocess import Popen, PIPE, STDOUT
from threading import Thread, Lock
exe_has_run = False
exe_lock = Lock()
def th():
global exe_has_run
with exe_lock:
if primary := exe_has_run is False:
exe_has_run = True
p = Popen([r'C:UsersdowDesktopddStructuredOsuMemoryProviderTester.exe'],stdout=PIPE,stderr=STDOUT)
if primary:
for line in p.stdout:
line=line.decode('utf-8')
print(line)

while True:  # this will blow up your process
Thread(target=th).start()
//extra codes

最新更新