2016-06-01 12 views
0

Ich verwende AWS EC2, um meine Anwendung "Neuronales Netzwerk in der Kunst" zu starten. Um Bilder zu versenden, stelle ich eine Webseite auf der Basis von flask + virtualenv + apache bereit. Nach dem Absenden des Skripts, das Bild auf dem Server startet, die bei jeder Iteration drucken und ich möchte es speichern, in out.txtApache: Errno 13 Dateizugriff verweigert

__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' 
#... 

Nun, ich kann Bild über HTTP hochladen, ohne Ergebnis in out schreiben .txt, aber wenn ich es tue, apache-Protokoll zeigt dies:

[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' 

Alle Dateien in diesem Verzeichnis nun 777 Berechtigung haben. Wenn ich versuche, wie script.py:

f = open('out.txt', 'w') 
f.write('some words') 
f.close() 

everithing Werke etwas mit einfacher Skript zu schreiben. Aber mit Apache tut es nicht. Hat jemand irgendwelche Ideen wie man es beheben kann?

+0

Haben Sie Apache seit den Änderungen neu gestartet? – ritlew

+0

@RitLew: ja! sudo service apache2 restart – Tehada

+0

Gibt es auch schon eine Datei namens out.txt im Verzeichnis? – ritlew

Antwort

0

Das Problem ist, dass Apache Ihren Code in einem anderen Arbeitsverzeichnis ausführt, in das Sie die Datei nicht schreiben wollen. Sie müssen der Datei einen vollständigen Pfad angeben.

f = open('/path/to/my/out.txt', 'w')