2014-05-16 21 views
5

Sto imparando la programmazione Web con Python e sto ancora passando attraverso lezioni/tutorial.error_perm: 550 Autorizzazione negata

Sto tentando di caricare un file su un server. Questo è il mio codice:

import ftplib 
import sys 

filename = sys.argv[1] 
connect = ftplib.FTP("***.**.***.**") 
connect.login("testuser","pass") 
file = open(filename, "rb") 
connect.storbinary("STOR " + filename, file) 
connect.quit() 

e questo è l'errore che ho:

File "C:\Users\test\putfile.py", line 8, in <module> 
    connect.storbinary("STOR " + filename, file) 
File "C:\Python27\lib\ftplib.py", line 471, in storbinary 
    conn = self.transfercmd(cmd, rest) 
File "C:\Python27\lib\ftplib.py", line 376, in transfercmd 
    return self.ntransfercmd(cmd, rest)[0] 
File "C:\Python27\lib\ftplib.py", line 339, in ntransfercmd 
    resp = self.sendcmd(cmd) 
File "C:\Python27\lib\ftplib.py", line 249, in sendcmd 
    return self.getresp() 
File "C:\Python27\lib\ftplib.py", line 224, in getresp 
    raise error_perm, resp 
ftplib.error_perm: 550 Permission denied. 

testuser dovrebbe avere il permesso di scrittura di file, dal momento che la cartella è di proprietà di lui, e lui ha i privilegi di root (è stato aggiunto nel file sudoer).

la stessa cosa accade se si aggiunge la linea:

connect.cwd('/testfolder') 

mi metterò error_perm: 550 Impossibile cambiare directory.

Tuttavia posso ancora leggere i file esistenti solo fini (con connect.retrlines ("RETR" + nome del file))

sono abbastanza nuovo su Python così come Linux, in modo da non avere idea quello che sto facendo. Ho bisogno di aiuto.

risposta

4

Vorrei verificare se siete nel posto giusto. Ho avuto lo stesso problema, e poi mi sono reso conto che ero in un'altra posizione che intendevo, nella cartella radice, sopra "/public_html", quindi non c'era nessuna cartella che volevo inserire, e non l'ho fatto avere le autorizzazioni per memorizzare qualsiasi file.

È possibile controllare dove siete in questo modo:

print connect.pwd() 

e ciò che il contenuto della directory corrente sono:

print ftplib.FTP.dir(connect) 

Quindi, se ci si trova nella cartella principale (" / "), sopra" /public_html "e si desidera modificare la directory corrente su" /testfile "è necessario utilizzare:

connect.cwd('/public_html/testfolder') 
+1

E don' passare un variabl a 'retrbinary()' o 'storbinary()' che ha il percorso del file in cui stai andando a scaricare il file sul tuo ** local ** machine, invece di passare una variabile con solo il nome del file sul server, come ho fatto io. : p – binarysubstrate

3

Forse questo può aiutare:

Con FTP non è proprietaria essere sufficiente di file e directory. Il servizio e il daemon FTP devono essere configurati correttamente per scrivere e creare file, ecc.

Per esempio in Ubuntu:
Modifica /etc/vsftpd.conf

E nella linea

;write_enable=YES 

Eliminare il punto e virgola

Infine riavviare il servizio:

sudo service vsftpd restart 
Problemi correlati