我正在尝试使用用Python编写的 CGI脚本执行bash脚本,但是只有在我手动运行脚本python时它才能正常工作。当我通过浏览器运行时,CGI执行返回200,但是bash脚本不运行。
这是我正在尝试做的一个例子,但是使用两个简单的脚本来解释,好吗?
cgi脚本是在以下apache目录中创建的,可以正常访问: 的 /var/www/cgi-bin/raf_teste.cgi
以下是 raf_teste.cgi 脚本的内容:
#!/usr/bin/python3.5
import subprocess
import cgi, cgitb
cgitb.enable()
print ("Content-type:text/html\r\n\r\n")
command = ['./raf.sh']
subprocess.Popen(command)
在同一目录“/ var / www / cgi-bin /”中创建了一个名为 raf.sh 的BashScript: 的 /var/www/cgi-bin/raf.sh
以下是raf.sh脚本的内容:
#!/bin/bash
echo "rafael" > "/tmp/rafael.txt"
注意:在测试中我使用python子进程模块运行linux命令,一切运行完美,但在这种情况下我试图通过python CGI运行另一个脚本,它不是工作且没有显示错误信息。
你能帮我吗?
答案 0 :(得分:1)
好的,我很确定我已经得到了它。
问题是您在网上运行脚本之前手动运行了脚本。
这导致您的用户拥有"/tmp/rafael.txt"
。现在,没有其他用户(包括Web服务器用户)可以写入该文件,因为该文件已经存在,由您拥有,并且that's how /tmp works。
解决方案很简单:删除"/tmp/rafael.txt"
。然后我打赌你的剧本有效。