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

时间:2018-08-19 07:53:26

标签: python python-2.7 cgi

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

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

test_imagefuncs.py

错误:

#!/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/html\n\n"
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>

如果我想念一些东西,请帮助我。我已经在stackoverflow和Web上搜索了解决方案。找不到与我的问题有关的解决方案。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

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