无法从django

时间:2015-07-10 11:51:31

标签: python django python-2.7

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

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脚本,还需要执行一个blender脚本,它本身也可以正常工作(直接从终端执行)但不会从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

1 个答案:

答案 0 :(得分:1)

首先,我建议通过导入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中的标准错误输出。即使它没有成功运行,你也可以在检查这两个变量之后使用它。