0

我试过同时使用 subprocess() 和 os.system()

import os
def whatever(request):
    open file
    code write to file
    close file
    os.system(command theFileIwroteto argument)

现在代码很好。我打开了 python 并从字面上复制并粘贴了确切的命令,它工作正常。

Python:

import os
os.system(command theFileIwroteto argument)

为什么它可以使用 python shell 工作但拒绝从 django 视图文件执行?

4

1 回答 1

0

您应该查看错误日志以进行正确的诊断。

没有更多信息,我可以想到两个原因:

  1. Apache mod_wsgi 限制对标准输出的访问,并且您正在运行的命令输出到标准输出。如果您使用的是 mod_wsgi,请IOError: sys.stdout access restricted by mod_wsgi在日志中查找错误;
  2. 您在以您的用户或 root 身份登录时测试您的命令,但网络服务器正在以具有较少权限的其他用户身份运行(如 Ubuntu 中的 www-data)。找出网络服务器在哪个用户下运行,su同一用户并尝试相同的命令。任何错误都会提示您缺少权限。

从 Django 视图运行 shell 几乎总是一个坏主意,特别是如果命令需要几秒钟才能运行。它的可扩展性很差,使某人更容易对您的站点进行 DDoS 攻击,并且使响应速度变慢。正确的做法是将作业放在队列中,并让一个或多个后台进程使用该队列。看看celery,它在这类任务中很受欢迎。

于 2013-07-16T07:21:59.923 回答