在Django视图中无法获得子流程输出

问题描述:

我想在Django视图中模拟我的脚本(TensorFlow neaural chatbot模型)的命令行调用,并从控制台获取输出到变量。在Django视图中无法获得子流程输出

当我手动执行在我的服务器的终端:

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''

我无法弄清楚我的电话有什么问题。

+1

尝试通过'标准输出= subprocess.PIPE'到'subprocess.check_output()'调用 – ZdaR

+1

@ZdaR您的评论转向我解决 –

的答案是使用.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]