Apache:Errno 13 文件权限被拒绝
Apache: Errno 13 file permission denied
我使用 AWS EC2 运行 我的应用程序 "Neural network in art"。为了发送图像,我部署了一个基于 flask + virtualenv + apache 的网站。在服务器上发送图像后启动脚本,打印每次迭代,我想将它存储在 out.txt
__init__.py:
#...
def apply_style(image_name, style_name, iterations):
command = ['"python ~/neural_artistic_style/neural_artistic_style.py', \
' --subject ', '/var/www/superapp/superapp/uploads/' + image_name, \
' --style ', '/var/www/superapp/superapp/uploads/' + style_name, \
' --iterations ', iterations, \
' --network ~/neural_artistic_style/imagenet-vgg-verydeep-19.mat"']
str = ''.join(command)
network = Popen(str, shell=True, stdout=PIPE)
stats = []
for out in network.stdout:
stats.append(out)
line = ' '.join(stats)
return line
@app.route('/upload', methods=['GET', 'POST'])
def upload():
if request.method == 'POST':
image = request.files['image']
style = request.files['style']
iterations = request.form['iter']
if file and style:
#Saving images...
result = apply_style(image_name, style_name, iterations)
f = open('out.txt', 'w')
f.write(result)
f.close()
return 'FINISHED'
#...
好吧,我可以通过 HTTP 上传图像而无需在 out.txt 中写入结果,但是当我这样做时,apache 日志显示如下:
[Wed Jun 01 ...] [:error] [pid 2360:tid 14...] return self.view_functions[rule.endpoint](**req.view_args)
[Wed Jun 01 ...] [:error] [pid 2360:tid 14...] File "/var/www/superapp/superapp/__init__.py", line 72, in upload
[Wed Jun 01 ...] [:error] [pid 2360:tid 14...] f = open('out.txt', 'w')
[Wed Jun 01 ...] [:error] [pid 2360:tid 14...] IOError: [Errno 13] Permission denied: 'out.txt'
此目录中的所有文件现在都具有 777 权限。当我尝试使用 script.py:
之类的简单脚本编写内容时
f = open('out.txt', 'w')
f.write('some words')
f.close()
一切正常。但是对于apache它没有。有人知道如何解决吗?
问题是 apache 运行您的代码,其中将有一个不同的工作目录,您不打算将文件写入其中。您必须提供文件的完整路径。
f = open('/path/to/my/out.txt', 'w')
我使用 AWS EC2 运行 我的应用程序 "Neural network in art"。为了发送图像,我部署了一个基于 flask + virtualenv + apache 的网站。在服务器上发送图像后启动脚本,打印每次迭代,我想将它存储在 out.txt
__init__.py:
#...
def apply_style(image_name, style_name, iterations):
command = ['"python ~/neural_artistic_style/neural_artistic_style.py', \
' --subject ', '/var/www/superapp/superapp/uploads/' + image_name, \
' --style ', '/var/www/superapp/superapp/uploads/' + style_name, \
' --iterations ', iterations, \
' --network ~/neural_artistic_style/imagenet-vgg-verydeep-19.mat"']
str = ''.join(command)
network = Popen(str, shell=True, stdout=PIPE)
stats = []
for out in network.stdout:
stats.append(out)
line = ' '.join(stats)
return line
@app.route('/upload', methods=['GET', 'POST'])
def upload():
if request.method == 'POST':
image = request.files['image']
style = request.files['style']
iterations = request.form['iter']
if file and style:
#Saving images...
result = apply_style(image_name, style_name, iterations)
f = open('out.txt', 'w')
f.write(result)
f.close()
return 'FINISHED'
#...
好吧,我可以通过 HTTP 上传图像而无需在 out.txt 中写入结果,但是当我这样做时,apache 日志显示如下:
[Wed Jun 01 ...] [:error] [pid 2360:tid 14...] return self.view_functions[rule.endpoint](**req.view_args)
[Wed Jun 01 ...] [:error] [pid 2360:tid 14...] File "/var/www/superapp/superapp/__init__.py", line 72, in upload
[Wed Jun 01 ...] [:error] [pid 2360:tid 14...] f = open('out.txt', 'w')
[Wed Jun 01 ...] [:error] [pid 2360:tid 14...] IOError: [Errno 13] Permission denied: 'out.txt'
此目录中的所有文件现在都具有 777 权限。当我尝试使用 script.py:
f = open('out.txt', 'w')
f.write('some words')
f.close()
一切正常。但是对于apache它没有。有人知道如何解决吗?
问题是 apache 运行您的代码,其中将有一个不同的工作目录,您不打算将文件写入其中。您必须提供文件的完整路径。
f = open('/path/to/my/out.txt', 'w')