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()
以优雅地处理它。
我正在 运行使用 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()
以优雅地处理它。