【发布时间】:2016-01-18 20:44:48
【问题描述】:
我已经为此工作了几个小时,但未能提出一个好的解决方案。一点背景知识,我正在运行一个密码破解程序,该程序从命令行关闭源代码,但当我的 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 阶段,所以我知道它可能没有遵循最佳编码实践。
【问题讨论】:
-
我们有机会自己尝试 pwdcrack 吗?
-
这是 OCLhashcat。这是我迄今为止使用过的最好的 gpu 饼干,但我的机器每 15 分钟左右就会超过 80 度,我必须持续监控它,这很痛苦。我只是想自动化更多。
标签: python multithreading subprocess popen communicate