我刚刚开始学习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上搜索了解决方案。找不到与我的问题有关的解决方案。
答案 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而言,这已经足够了,但考虑到潜在的安全隐患,则不应在任何严重的情况下使用。