从Django视图运行linux命令。在pythonshell中工作良好。韩元';不能从视图执行

从Django视图运行linux命令。在pythonshell中工作良好。韩元';不能从视图执行,python,django,apache,Python,Django,Apache,我尝试过同时使用subprocess()和os.system() 现在代码很好。我已经打开了python,并直接复制和粘贴了确切的命令,效果很好 python: import os os.system(command theFileIwroteto argument) 为什么它可以使用python shell工作,但拒绝从django视图文件执行?您应该查看错误日志,以便进行正确的诊断 如果没有更多信息,我可以想到两个原因: apachemod_wsgi限制对stdout的访问,您正在运行的命

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

现在代码很好。我已经打开了python,并直接复制和粘贴了确切的命令,效果很好

python:

import os
os.system(command theFileIwroteto argument)

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

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

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

  • apachemod_wsgi限制对stdout的访问,您正在运行的命令将输出到stdout。如果您使用的是mod_wsgi,请在日志中查找诸如
    IOError:sys.stdout访问受限于mod_wsgi
    之类的错误
  • 当您以用户或root用户身份登录时,您正在测试您的命令,但Web服务器正在以其他权限较低的用户身份运行(如Ubuntu中的www数据)。找出Web服务器正在哪个用户下运行,
    su
    发送给同一用户,然后尝试使用相同的命令。任何错误都会提示您缺少权限

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

    您是如何运行视图的?您将其标记为apache,这会让我认为您正在以wsgi(而不是django dev服务器等)的形式运行它。您正在运行什么操作系统?您是否获得了受mod_wsgi限制的sys.stdout访问权限?
    import os
    os.system(command theFileIwroteto argument)