无法在linux服务器上以编程方式写入文件 < P>我有一个Python CGI脚本,它是输入“代码< >代码> x//>和 y>代码>(整数),并将其传递给C++执行的,使用程序代码>子进程< /> >程序将两个值的和写入文本文件。

无法在linux服务器上以编程方式写入文件 < P>我有一个Python CGI脚本,它是输入“代码< >代码> x//>和 y>代码>(整数),并将其传递给C++执行的,使用程序代码>子进程< /> >程序将两个值的和写入文本文件。,python,linux,cgi,subprocess,Python,Linux,Cgi,Subprocess,代码在我的本地机器上运行良好。然而,经过多次测试,我发现每当我在服务器上运行这个程序(在/var/www中)并试图写入文件时,就会出现某种错误,因为我得到了“内部服务器错误”页面 服务器不是我的,因此我实际上没有sudo权限。但是从putty开始,我可以手动运行可执行文件,它确实可以编写文件 我的猜测是,我必须以某种方式在一定权限下从python脚本运行可执行文件,但我不确定。如果有任何建议,我将不胜感激 编辑: @gnibbler:有趣的是,我能够毫无问题地将文件写入/tmp目录 因此,我认为

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

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

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

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

因此,我认为您的建议是正确的,服务器根本不允许我在从浏览器调用脚本时进行编写


此外,我无法使用错误日志访问目录,因此我必须尝试获得相应的权限。

或者环境不同(可能它试图写入错误的目录),或者更可能的是,cgi运行的用户与您登录的用户不同

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


您可以尝试让cgi将文件写入
/tmp
。这至少可以确认cgi运行的用户身份,或者是环境不同(可能是试图写入错误的目录),或者更有可能是cgi运行的用户与您登录的用户身份不同

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


您可以尝试让cgi将文件写入
/tmp
。这至少可以确认cgi运行的用户身份,正如其他人所说,您可能遇到了权限问题。但除非查看错误日志,否则无法确定发生了什么内部服务器错误通常会掩盖实际错误

要找出实际的错误是什么,您可以执行以下两种操作之一。你说你在做CGI,所以我建议你在测试的时候看看;它将在浏览器中向您显示Python回溯(尽管这在您的子流程场景中可能没有帮助)


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

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

要找出实际的错误是什么,您可以执行以下两种操作之一。你说你在做CGI,所以我建议你在测试的时候看看;它将在浏览器中向您显示Python回溯(尽管这在您的子流程场景中可能没有帮助)


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

尝试
chmod 0666您正在写入的文件到.txt
如果这不起作用,那么请确保C++文件在组“其他”中具有可执行权限,请尝试<代码> CHMOD 0755程序> <代码> < <

尝试
chmod 0666您正在写入.txt的文件
如果这不起作用,那么请确保C++文件在组“其他”中具有可执行权限,请尝试<代码> CHMOD 0755程序> <代码> < <

脚本是否通过web服务器“启动”?因为如果是,WS就是服务器上的用户(或者我认为是这样)如何正确配置Web服务器以启动cgi脚本?您测试过cgi是否工作了吗?脚本不是以您的权限运行的,而是以web服务器的权限运行的。如果服务器没有写访问权限,脚本将因错误而终止,如您所述。是的,服务器配置为使用cgi脚本@特里皮,恐怕你是对的。我只是希望我可以允许写。脚本是通过web服务器“启动”的吗?因为如果是,WS就是服务器上的用户(或者我认为是这样)如何正确配置Web服务器以启动cgi脚本?您测试过cgi是否工作了吗?脚本不是以您的权限运行的,而是以web服务器的权限运行的。如果服务器没有写访问权限,脚本将因错误而终止,如您所述。是的,服务器配置为使用cgi脚本@特里皮,恐怕你是对的。我只是希望我可以允许写。是的,我可以写进/tmp。我尝试让它显式地写入CGIBIN(“/var/www/cgi-bin/test.out”)以及相对路径(“test.out”);他们都给出了内部服务器错误页。@Aaron,但是谁拥有您在
/tmp
中创建的文件,并且该用户是否有权限写入
/var/www/cgi-bin/
。旁白:您真的在将文件写入CGIBIN目录吗?这看起来很不安全实际上,我无法删除我在/tmp中创建的文件(哎哟)。无论如何,这是一个概念验证计划。我想向用户发送文件的链接。也许让一个不同的目录可以公开查看并写入其中会更安全?是的,我可以写入/tmp。我尝试让它显式地写入CGIBIN(“/var/www/cgi-bin/test.out”)以及相对路径(“test.out”);两人都给出了内部服务器错误页。@Aaron,bu