在日志中找到特定字符串时停止子流程

  • 本文关键字:字符串 日志 python ethereum
  • 更新时间 :
  • 英文 :


这是一个关于子流程的问题。

我正在使用这个异步脚本来完成我正在做的一些工作:https://github.com/ethereum/trinity/blob/master/scripts/peer.py

脚本的功能与我想要使用此脚本的方式无关。

由于它是异步的,我希望在具有不同值的子流程中运行它,对于每个子流程,我希望等待一定的超时,然后在脚本的日志中检查字符串。如果我找到了要查找的字符串,我将退出传递的参数的子流程,并传入一个新参数,重复该流程。

从高层来看,这是我正在尝试的子流程脚本。

import subprocess
enode = 'enode://ecd3f3de6fc1a69fdbb459ccfeedb9ae4b@127.0.0.1:30303'
command = [
'python',
'-m',
'scripts.peer',
'-mainnet',
'-enode',
enode
]
proc = subprocess.Popen(command)
try:
outs, errs = proc.communicate(timeout=15)
except TimeoutExpired:
proc.kill()
outs, errs = proc.communicate()
print(outs)
print(errs)

此代码不起作用,并且从未退出脚本。如何将子流程与异步脚本一起使用,以便在子流程的日志中查找值时停止它,并且在那里找到了我要查找的值。

我要查找的日志中的字符串是:failed DAO fork check validation,我会用它作为停止脚本的触发器。

您需要显式地将子流程的输入流和错误流设置为subprocess.PIPE,以便从中读取,就像这样

# ...
proc = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

最新更新