2014-05-16 498 views
5

我正在学习使用Python进行网络编程,而且基本上还是要通过讲座/教程。error_perm:550权限被拒绝

我试图上传文件到服务器。这是我的代码:

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

,这是错误我:

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应该有写文件的权限,因为该文件夹是由他拥有,他有root权限(被添加到sudoer文件中)。

同样的事情发生,如果我添加一行:

connect.cwd('/testfolder') 

我会得到error_perm:550无法更改目录。

但是我仍然可以读取现有的文件就好了(用 connect.retrlines(“RETR” +文件名))

我很新的Python以及Linux,所以我没有知道我在做什么。我需要一些帮助。

回答

4

我会检查你是否在正确的位置。我遇到了同样的问题,然后我意识到我位于根目录文件夹中“/public_html”之上的其他位置,因此没有我想要输入的文件夹,而且我也没有有权限存储任何文件。

您可以检查你在哪里,是这样的:

print connect.pwd() 

什么当前目录的内容是:

print ftplib.FTP.dir(connect) 

所以,如果你是在根文件夹(” /“),在”/public_html“之上,并且您想要将当前目录更改为”/testfolder“您需要使用:

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

和Don”通过变量e到具有文件路径的“retrbinary()”或“storbinary()”,这些文件路径将在您的本地**机器上下载文件,而不是仅仅通过文件名服务器,就像我一样。 :p – binarysubstrate

3

也许这可以帮助:

使用FTP是不是文件和目录的足够BE所有者。 服务和守护进程FTP必须正确配置才能写入和创建文件等。

例如在Ubuntu:
编辑/etc/vsftpd.conf

而且在该行

;write_enable=YES 

删除分号

最后重新启动服务:

sudo service vsftpd restart