python异步执行subprocess.Popen(),并输出执行的log

目标

我的web项目需要用异步跑一些任务,在web页面上提交后,接收一个执行状态,
希望能在web后台看到提交的任务的执行进度
异步任务的输出日志在任务脚本中可以自己添加

网上解决方案在我这有问题

参考了 Python subprocess.Popen 实时输出 stdout(正确管道写法)等多个相关问题的文章,但是在我的环境没法看到输出

这些popen参数中的stderr都是使用的subprocess.PIPE、STDOUT、STDERR,

subprocess.Popen('ping baidu.com', shell=True, stdout=PIPE,stderr=PIPE)

我之前见到过sys也有 stdout,stderr,是不是可以作为我想要的输出?试了下还真行,输出结果直接到了web的后台日志中,想写入log文件我想也是类似的。

实现逻辑

import sys
import datetime
import time
from subprocess import Popen, PIPE, STDOUT

a = Popen(['python3', 'test.py', '_id'],
          stdout=sys.stdout,
          stderr=sys.stderr,
          )

print(datetime.datetime.now(),a.poll())

# 等待执行结束,看下效果
time.sleep(5)
print(datetime.datetime.now(),a.poll())

执行结果如下:
可以看到开始a的状态是None,5s后a的状态是0,
中间test的print也输出出来了

2021-03-29 14:24:42.959382 None
2021-03-29 14:24:43.088357 test beginning
['test.py', '_id']
2021-03-29 14:24:45.092394 test finished
2021-03-29 14:24:47.964035 0
PS:test.py的内容简单写下
import time
import datetime
import sys

if __name__ == '__main__':
    print(datetime.datetime.now(), 'test beginning')
    print(sys.argv)
    time.sleep(2)
    print(datetime.datetime.now(), 'test finished')

你可能感兴趣的:(python,python,异步执行,popen)