我已经为此工作了几个小时,但未能提出一个好的解决方案。一点背景知识,我正在运行一个密码破解程序,该程序从命令行关闭源代码,但当我的 gpu 温度太高时必须不断暂停它。
我用这个程序在 python 中进行其他操作,所以这是我更喜欢的语言。无论如何,密码程序会定期更新它的运行情况、gpu 温度等,并允许我随时暂停它。
我的温度很好,但由于阻塞问题,我猜我无法发送暂停命令。至少它什么也没做。我见过几个线程化输出的例子,但还没有看到使用线程化输入和输出而不会导致任何问题的东西。
我的意思是,据我所知,在当前的 POPEN 限制下这可能是不可能的,但希望有一些方向。
popen = Popen(command, stdout=PIPE, stdin=PIPE, shell=True)
lines_iterator = iter(popen.stdout.readline, b"")
while 1:
for line in lines_iterator:
cleanLine = line.replace("\n", "")
p = re.compile('[0-9][0-9]c Temp')
m = p.search(cleanLine)
print cleanLine
if m:
temperature = m.group(0)
if int(temperature[:2]) > 80:
overheating = True
print "overheating"
if overheating:
if "[s]tatus [p]ause [r]esume [b]ypass [q]uit" in line:
#It's not doing anything right here, it just continues
print popen.communicate("p")[0]
这是我的代码的要点。它仍然处于 hacky 阶段,所以我知道它可能没有遵循最佳编码实践。