0

我需要调用一个运行 dd 命令(http req 1)的 python 服务(我使用的是 bottle 和 gunicorn),并且我需要能够随时通过另一个调用(http req 2)终止该过程。

A)如果我这样做:

p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out = p.stdout.read().strip()

http req 2 一直等到 http req 1 结束(因此读取输出会阻塞并发调用)

B)如果我将输出写入文件,http req 1 不会阻止其他请求,但该请求在后台执行命令的同时结束。

所以,我需要保持 http req 1 直到命令完成,但同时我需要能够用另一个请求终止进程。(如果我使用简单的 time.sleep(x) 而不是读取我想要的输出,req 1 保持活动状态,我可以同时调用 req 2)

请帮忙

4

1 回答 1

1

您可以尝试使用http://docs.python.org/library/subprocess.html#subprocess.Popen.stdout + select.select([p.stdout.fileno()], [], [], timeout),但最简单的方法是使用 http://docs.python.org/library/subprocess.html #subprocess.Popen.poll检查进程是否终止并仅在子进程终止时读取输出。

while p.pool() is None: # supprocess alive
    time.sleep(timeout)
out = p.stdout.read()
于 2012-05-25T11:17:06.340 回答