如何在Django/WSGI中调用bash进程?
我正在为一个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
2
这个脚本本身可能有755的权限,但它调用的其他东西可能权限设置不对。特别是如果你在80端口上运行tomcat,这个端口是有特权的。
有一些方法可以解决这种问题(比如setuid和sudo),但你最好要非常清楚自己在做什么。
我建议你把Popen的调用改成打开一个不同的脚本,内容是date >> /home/example.com/test.txt
,这样可以先看看它是否能执行这个脚本,然后再去解决权限的问题。