如何在Django/WSGI中调用bash进程?

4 投票
2 回答
1728 浏览
提问于 2025-04-15 21:25

我正在为一个Django网站使用mod_wsgi和apache2适配器,我想在一个视图中调用一些bash进程,使用的是常规的

...
p = subprocess.Popen("/home/example.com/restart-tomcat.sh", shell=True)
sts = os.waitpid(p.pid, 0)[1]
...

这段代码在普通的Python命令行中运行得很好,但在Django中调用时却没有任何反应(我现在可以追踪到这一点)。我是不是漏掉了什么wsgi的限制?这个脚本的权限是755,所以应该是可以执行的。

一个快速测试

p = subprocess.Popen("date >> home/example.com/wsgi-test.txt", shell=True)
sts = os.waitpid(p.pid, 0)[1]

显示它甚至连简单的命令都不执行。我现在没有更多的想法了,非常感谢任何建议。

谢谢。

2 个回答

0

写入标准输出

这里有个链接: http://code.google.com/p/modwsgi/wiki/ApplicationIssues

这和这里的情况有关吗?我正在研究一个类似的问题……

2

这个脚本本身可能有755的权限,但它调用的其他东西可能权限设置不对。特别是如果你在80端口上运行tomcat,这个端口是有特权的。

有一些方法可以解决这种问题(比如setuid和sudo),但你最好要非常清楚自己在做什么。

我建议你把Popen的调用改成打开一个不同的脚本,内容是date >> /home/example.com/test.txt,这样可以先看看它是否能执行这个脚本,然后再去解决权限的问题。

撰写回答