无法在 Django 视图中获取子进程输出
Posted
技术标签:
【中文标题】无法在 Django 视图中获取子进程输出【英文标题】:Cannot get subprocess output in Django view 【发布时间】:2017-06-29 17:11:10 【问题描述】:我想在 Django 视图中模拟我的脚本(TensorFlow 神经聊天机器人模型)的命令行调用,并从控制台获取输出到变量。
当我在我的服务器终端手动操作时:
python3 var/www/engine/chatbot/udc_predict.py --model_dir=var/www/engine/chatbot/runs/1486057482/
输出很好,打印出来了。
所以在我的 Django 视图中我会这样做:
import subprocess
answer = subprocess.check_output(['python3', 'var/www/engine/chatbot/udc_predict.py','--model_dir=var/www/engine/chatbot/runs/1486057482/'], shell=True, stderr=subprocess.STDOUT, timeout=None)
print('answer', answer)
并且answer
变量在 Apache 错误日志中打印为 b''
。
我无法弄清楚我的电话出了什么问题。
【问题讨论】:
尝试将stdout=subprocess.PIPE
传递给subprocess.check_output()
调用
@ZdaR 你的评论让我不得不去解决
【参考方案1】:
答案是使用 .communicate() 和 PIPE:
from subprocess import Popen, PIPE
proc = Popen(
"python3 var/www/engine/chatbot/udc_predict.py --model_dir=var/www/engine/chatbot/runs/1486057482/",
shell=True,
stdout=PIPE, stderr=PIPE
)
proc.wait()
res = proc.communicate()
if proc.returncode:
print(res[1])
print('result:', res[0])
answer = res[0]
【讨论】:
以上是关于无法在 Django 视图中获取子进程输出的主要内容,如果未能解决你的问题,请参考以下文章