1

我有一个 python CGI 脚本,它接受表单输入xy(整数)并将其传递给 C++ 可执行文件,程序使用subprocess其中将两个值的总和写入文本文件。

该代码在我的本地机器上运行良好。然而,经过大量测试,我发现每当我在我的服务器(in /var/www)上运行这个程序并尝试写入文件时,都会发生某种错误,因为我得到“内部服务器错误”页面。

服务器不是我的,所以我实际上没有 sudo 权限。但是从腻子,我可以手动运行可执行文件,它确实会写入文件。

我的猜测是我必须以某种方式从 python 脚本运行可执行文件并获得一定的权限,但我不确定。我将不胜感激任何建议!

编辑:
@gnibbler:有趣的是,我能够毫无问题地将文件写入 /tmp 目录。

所以我认为你的建议是正确的,从浏览器调用脚本时服务器根本不允许我写。

此外,我无法访问带有错误日志的目录,因此我将尝试获得许可。

4

3 回答 3

1

环境不同(可能它试图写入错误的目录)或更可能的是,cgi 没有以您登录的同一用户身份运行。

例如,cgi 脚本以“nobody”或“www”等形式执行是相当普遍的。

您可以尝试让 cgi 将文件写入/tmp. 那至少应该确认cgi正在运行的用户

于 2012-05-11T12:05:34.477 回答
0

正如其他人所说,您可能遇到了权限问题。但是除非查看错误日志,否则您无法确定发生了什么——内部服务器错误通常会掩盖实际错误。

要弄清楚实际错误是什么,您可以做以下两件事之一。你说你在做 CGI,所以我建议cgitb你在测试的时候看看;它会在您的浏览器中向您显示 Python 回溯(尽管这可能对您的子流程场景没有帮助。)

否则,您将需要查看 Web 服务器的错误日志,其中可能包含 Python 回溯,并希望向您展示发生了什么。保存这些文件的典型地方是/var/log/httpd. 如果您无权访问,或者在此处找不到日志,请询问您的服务器管理员在哪里可以找到它们。

于 2012-05-11T12:11:07.527 回答
0

尝试chmod 0666 filethatyouarewritingto.txt 如果这不起作用,请确保您的 c++ 文件在“其他”组中具有可执行权限,请尝试chmod 0755 yourprogram.

资源

于 2013-05-09T17:45:10.733 回答