无法从django执行外部python脚本

问题描述:

我想从我的Django应用程序内执行Python脚本。我试着从终端执行它,它工作正常,所以我知道被调用的Python脚本工作正常。 Python脚本调用覆盖服务器上文件的外部程序。外部程序具有所有必需的权限。我甚至尝试对涉及的所有文件使用777权限,但仍然没有用。无法从django执行外部python脚本

Django的观点:

import subprocess 
subprocess.call("python " + script_dir+"testScript.py", shell=True) 

的Python - 2.7

我可以执行简单的命令,如

subprocess.call("rm " + script_dir+"test.txt", shell=True) 

编辑: 我不仅从终端执行Python脚本,我也需要执行一个混合器脚本,它本身再次正常工作(当直接从终端执行时),但不会从内部生成所需的输出Django的。

这是错误在我的Django控制台:

OSError at /getObj/ 

[Errno 2] No such file or directory 

Request Method:  GET 
Request URL: http://192.168.1.21:8081/getObj/?width=5.0&height=6.0&depth=7.0 
Django Version:  1.7.8 
Exception Type:  OSError 
Exception Value:  

[Errno 2] No such file or directory 

Exception Location:  /usr/lib/python2.7/subprocess.py in _execute_child, line 1327 
Python Executable: /usr/bin/python 
Python Version:  2.7.6 
+2

你为什么要通过'subprocess'调用Python脚本?为什么不导入它并直接调用它? –

+0

实际上我需要从Django应用程序运行3个脚本,其中2个脚本不是直接的python脚本。所以我需要使用子进程。虽然你确实有一点。 – ms95

+0

你得到的错误是什么? – deathangel908

首先,我建议通过导入它,而不是在一个单独的进程中运行它(除非你有特殊的理由这样做运行Python代码那)。既然你提到了你想运行的其他非Python脚本,我会建议一种通用的方式。

我会尝试和运行使用Popen这样的脚本:

from subprocess import Popen, PIPE 

# ... 

p = Popen(["python", "testScript.py"], cwd=script_dir, stdout=PIPE, stderr=PIPE) 
out, err = p.communicate() 

然后,你必须在out标准输出和标准错误输出err。即使它没有成功运行,在检查这两个变量之后,你仍然有一些工作要做。

+0

非常感谢!有效 :) – ms95