如何从django / wsgi中调用bash进程?

时间:2010-04-09 14:56:59

标签: python django bash tomcat subprocess

我正在为django网站使用mod_wsgi apache2适配器,我喜欢在视图中调用一些bash进程,使用通常的

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

这个代码在通常的python shell中完美运行,但在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的不同脚本,只是为了查看它是否正在执行它,然后你可以担心尝试调试权限。

答案 1 :(得分:0)

写入标准输出

此处:http://code.google.com/p/modwsgi/wiki/ApplicationIssues

这适用于此吗?我正在研究类似的问题......