【问题标题】:Unable to execute external python script from django无法从 django 执行外部 python 脚本
【发布时间】:2015-07-10 11:51:31
【问题描述】:

我正在尝试从我的 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 脚本,还需要执行一个搅拌机脚本,它本身也可以正常工作(直接从终端执行时),但不会从 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

【问题讨论】:

  • 为什么要通过subprocess调用Python脚本?为什么不导入直接调用呢?
  • 实际上我需要从 Django 应用程序运行 3 个脚本,其中 2 个不是直接的 python 脚本。所以无论如何我都需要使用子进程。虽然你确实有一点。
  • 你遇到了什么错误?
  • 您指定了错误的文件路径。写入以记录字符串script_dir+"testScript.py" 确保它是绝对的
  • 我在函数调用之前检查了路径。确实是绝对的。

标签: python django python-2.7


【解决方案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 中有标准错误输出。即使它没有成功运行,在检查了这两个变量之后,您也可以使用一些东西。

【讨论】:

    猜你喜欢
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-13
    • 2020-08-18
    • 1970-01-01
    相关资源
    最近更新 更多