无法在linux服务器上以编程方式写入文件

时间:2012-05-11 11:56:04

标签: python linux cgi subprocess

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

代码在我的本地计算机上正常运行。但是,经过大量测试后,我发现无论何时我在我的服务器上运行此程序(在/var/www中)并尝试编写该文件,都会发生某种错误,因为我收到了“内部服务器错误”页面。

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

我的猜测是我必须以某种方式运行python脚本中的可执行文件,但我不确定。我很感激任何建议!

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

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

另外,我无法使用错误日志访问该目录,因此我将尝试获得该权限。

3 个答案:

答案 0 :(得分:1)

环境不同(可能是在尝试写入错误的目录)或者更有可能的是,cgi没有像您登录的用户那样运行。

例如,将cgi脚本作为“nobody”或“www”等执行是相当常见的。

你可以尝试让cgi将文件写入/tmp。这应该至少确认用户cgi正在运行

答案 1 :(得分:0)

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

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

否则,您将需要查看Web服务器的错误日志,该日志可以包含Python回溯,并希望向您显示正在进行的操作。这些保存的典型位置是/var/log/httpd。如果您没有访问权限,或者无法在那里找到日志,请询问服务器管理员您可以在哪里找到它们。

答案 2 :(得分:0)

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

Source