Python subprocess Popen周期回调

Python subprocess Popen periodic callback

我正在 运行使用 Spot 实例在亚马逊 AWS 上进行 HPC 模拟。 AWS 可提前 2 分钟通知终止 Spot 实例。为了检查终止,您需要每 5 秒在特定 URL 上执行 curl。这是一个简单的请求,如果 AWS 已启动终止过程,returns 带有终止时间的 json。

目前我正在使用 subprocess 到 运行 脚本:

p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, bufsize=1, universal_newlines=True)
for line in p.stdout:
    if "Floating point exception" in line:
        print(line.rstrip())
    log.write(line)
    log.flush()
p.wait()
status = p.returncode
print(status)

是否可以添加每 5 秒调用一次的回调?

回调将检查 curl 命令的 return,如果找到终止时间,它将在文件中设置标志并退出。由于这个标志,主进程将优雅地结束。

澄清一下,我不想交互或终止主进程。这个特定的过程(不是我写的)不断检查文件的内容,如果找到特定的关键字,就会优雅地退出。回调将设置此关键字。

这是正确的方法吗?

编写一个运行以下循环的函数;

  • 在子进程中启动 curl 并处理返回的 JSON。
  • 如果 sim 应该终止,它会写入所需的文件和 returns。
  • 否则sleep 4.5 分钟。

在启动模拟之前在 threading.Thread 中启动该函数。

如果 p 中的程序 运行 退出,您必须测试 for line in p.stdout 循环会发生什么情况。 也许它会产生异常。或者您可能想在循环中检查 p.poll() 以优雅地处理它。