如何通过用Python编写的CGI脚本执行bash脚本?

时间:2018-05-22 15:27:49

标签: python cgi

我正在尝试使用用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运行另一个脚本,它不是工作且没有显示错误信息。

你能帮我吗?

1 个答案:

答案 0 :(得分:1)

好的,我很确定我已经得到了它。

问题是您在网上运行脚本之前手动运行了脚本。

这导致您的用户拥有"/tmp/rafael.txt"。现在,没有其他用户(包括Web服务器用户)可以写入该文件,因为该文件已经存在,由您拥有,并且that's how /tmp works

解决方案很简单:删除"/tmp/rafael.txt"。然后我打赌你的剧本有效。