2014-05-16 16 views
5

Uczę się programowania w Internecie za pomocą Pythona, a wciąż w zasadzie przechodzę przez wykłady/samouczek.error_perm: 550 Odmowa uprawnień

Próbuję przesłać plik na serwer. To jest mój kod:

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() 

i to jest błąd mam:

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 powinien mieć uprawnienia do zapisu plików, ponieważ folder jest własnością przez niego, a on ma uprawnienia roota (został dodany w pliku sudoer).

samo się dzieje, jeśli mogę dodać linię:

connect.cwd('/testfolder') 

dostanę error_perm 550 Failed to change directory.

Jednak nadal mogę odczytać istniejące pliki w porządku (z connect.retrlines („Odbierz” + filename))

Jestem całkiem nowy o Pythonie jak Linux, więc nie mam pomysł co robię. Potrzebuję pomocy.

Odpowiedz

4

Sprawdziłbym, czy jesteś we właściwym miejscu. Miałem ten sam problem, a potem zdałem sobie sprawę, że znajdowałem się w innym miejscu, które zamierzałem, w folderze głównym, powyżej "/public_html", więc nie było folderu, który chciałem wprowadzić, a ja nie mieć uprawnienia do przechowywania dowolnych plików.

Można sprawdzić, gdzie jesteś w ten sposób:

print connect.pwd() 

i co zawartość bieżącego katalogu są:

print ftplib.FTP.dir(connect) 

Tak więc, jeśli jesteś w folderze głównym (”/ "), powyżej" /public_html "i chcesz zmienić bieżący katalog na"", musisz użyć:

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

i don” t przekazać variabl e do 'retrbinary()' lub 'storbinary()', który ma ścieżkę do pliku, do którego zamierzasz pobrać plik na ** lokalnym komputerze, zamiast podania zmiennej z samą nazwą pliku na serwer, tak jak ja. : p – binarysubstrate

3

Może to pomoże:

z FTP nie wystarcza być właściciel plików i katalogów. Usługa i demon FTP musi być poprawnie skonfigurowany, aby pisać i tworzyć pliki itp.

Na przykład w Ubuntu:
Edycja /etc/vsftpd.conf

A w linii

;write_enable=YES 

Usuń średnik

Wreszcie ponownie uruchomić usługę:

sudo service vsftpd restart 
Powiązane problemy