【问题标题】:How to execute a bash script through a CGI script written in Python?如何通过用 Python 编写的 CGI 脚本执行 bash 脚本?
【发布时间】:2018-05-22 15:27:49
【问题描述】:

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

你能帮帮我吗?

【问题讨论】:

  • 你确定网络服务器没有自己的私人/tmp
  • 运行 Web 服务器的用户是否可以执行 raf.sh
  • @IgnacioVazquez-Abrams 我已经尝试过其他具有 777 权限的目录,即使这样它也无法写入,也没有给我错误消息。我已经测试了好几天了。
  • @rbricheno 我在 raf.sh 脚本上设置了 777 权限

标签: python cgi


【解决方案1】:

好的,我肯定知道了。

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

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

解决方法很简单:删除"/tmp/rafael.txt"。那么我敢打赌你的脚本会奏效。

【讨论】:

  • 首先非常感谢您的帮助。我尝试删除文件并尝试更改目标目录,但问题仍然存在。
  • 对不起,这不起作用,我已经设置了一个测试环境,这对我有用。您使用的是什么网络服务器,您可以阅读网络服务器的错误日志吗?对于 apache,它类似于 /var/log/apache2/error.log
猜你喜欢
  • 2012-02-16
  • 2011-09-15
  • 1970-01-01
  • 2020-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-30
相关资源
最近更新 更多