IOError: [errno 2] 从 Web 浏览器执行脚本时没有这样的文件或目录



我刚刚开始学习python以及如何从浏览器执行脚本。我有一个示例脚本,我正在尝试创建一个 json 文件并将字典数据写入该文件。下面是我的代码。当我从终端执行此脚本时,我能够看到正在创建的文件并将数据转储到文件中。但是当我尝试从 Web 浏览器执行相同的脚本时,我在 apache 错误中看到错误.log文件为 IOError:[Errno 2] 没有这样的文件或目录。

这是我的代码,我正在使用python 2.7:

#!/usr/bin/python
import os
import json
data = {"price": "$10"}
filepath = '/tmp/'
filename = filepath + 'my_data.json'
os.path.join(filename)
f = open(filename, "w+") # error at this line 
json.dump(data, f)
f.close()

print "Content-type: text/htmlnn"
print '''
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Language" content="en" />
<title>Sample Home Page</title>
</head>
<body>
'''
print '''
<h1>
<BR> SAMPLE TEXT
</h1>
</body>
</html>

错误:

[Sun Aug 19 13:19:15.913003 2018] [cgi:error] [pid 970] [client ::1:50818] AH01215: Traceback (most recent call last):: /var/www/html/python/test3.py
[Sun Aug 19 13:19:15.913177 2018] [cgi:error] [pid 970] [client ::1:50818] AH01215:   File "/var/www/html/python/test3.py", line 10, in <module>: /var/www/html/python/test3.py
[Sun Aug 19 13:19:15.913237 2018] [cgi:error] [pid 970] [client ::1:50818] AH01215:     f = open(filename, "w+"): /var/www/html/python/test3.py
[Sun Aug 19 13:19:15.913347 2018] [cgi:error] [pid 970] [client ::1:50818] AH01215: IOError: [Errno 2] No such file or directory: '/tmp/my_data.json': /var/www/html/python/test3.py
[Sun Aug 19 13:19:15.915809 2018] [cgi:error] [pid 970] [client ::1:50818] End of script output before headers: test3.py
                                                 3,9           Top

如果我错过了学习一些东西,请帮助我。我已经搜索了stackoverflow和web寻找解决方案。没有找到与我的问题相关的解决方案。

你的代码工作正常!我的系统(Ubuntu 17.10(没有任何错误。

您尚未指定使用的操作系统和 HTTP 服务器。这可能是相关的,因为我在 CentOS 7.6 和 Apache 2.4 下看到了与您类似的错误。

一个可能的原因是 SElinux 在 CentOS 下默认启用,它可以阻止 CGI 脚本访问某些目录。当我从运行 Ubuntu 的 VM 移植一个基于 CGI 的小型应用程序(一个简单的注册页面(时,我学到了这一点。它的核心CGI脚本用于将其输出写入/var/tmp/regreg子目录由"apache"用户拥有,并具有775权限。这在 Ubuntu 下完美运行了多年,但在 CentOS 下给了我错误[Errno 2] No such file or directory。(顺便说一句,这可能是@GLinBoy在 Ubuntu 17.10 下也没有收到任何错误的原因。

我的快速而肮脏的解决方案是让 CGI 脚本将文件写入我的主目录下的目录(权限为 777(。这对于仅服务于内部客户端的小型 VM 来说已经足够了,但考虑到潜在的安全隐患,不应用于任何严重的事情。

最新更新