【问题标题】:python 3: permission for ftp command "dir" in certain directories deniedpython 3:某些目录中ftp命令“dir”的权限被拒绝
【发布时间】:2017-08-24 19:34:04
【问题描述】:

情况:

我正在尝试编写一个 ftp 文件自动启动和下载程序。它将遍历我的文件并自动上传新文件。 ftp 服务器内置在我的 wifi 路由器中。我已将 ftp 服务器包含在我的 Ubuntu 文件系统中,一切正常(我可以访问所有内容)。主站点就像家庭文件夹和我自己的文件夹。

现在我的问题:

到目前为止,我能够连接到服务器并切换到我的目录并列出文件夹。但是,如果我想从此目录更改为例如C++(它是我目录中的一个文件夹),我会收到一条错误消息,说“权限被拒绝”。用于登录的用户帐户与我的文件系统包含中使用的用户帐户相同。

python 3 代码:

from ftplib import FTP_TLS


class ftp_client():

    def __init__(self, host, unandpw):
        self.host = host
        self.logindata = unandpw #should be a touple
        self.ftp = FTP_TLS(self.host)
        self.ftp.login(self.logindata[0], self.logindata[1])
        self.ftp.prot_p()

    def scan(self):
        self.ftp.cwd("/" + self.logindata[0] + "/")
        self.listoffiles = self.ftp.nlst()
        print("list of files: " + str(self.listoffiles))
        for file in self.listoffiles:
            self.ftp.cwd("/" + str(file) + "/")
            self.listoffilesinfiles = self.ftp.nlst()
            print(self.listoffilesinfiles)
            self.ftp.cwd("/" + self.logindata[0] + "/")

我通过外部主文件调用它...

控制台输出:

list of files: ['C++', 'Documents', 'Pictures', 'Python', 'School', 
'share', 'Videos']
Traceback (most recent call last):
  File "main.py", line 5, in <module>
    ftp.scan()
  File "/home/simon/Python/autoserversync/client.py", line 18, in scan
    self.ftp.cwd("/" + str(file) + "/")
  File "/usr/lib/python3.5/ftplib.py", line 630, in cwd
    return self.voidcmd(cmd)
  File "/usr/lib/python3.5/ftplib.py", line 277, in voidcmd
    return self.voidresp()
  File "/usr/lib/python3.5/ftplib.py", line 250, in voidresp
    resp = self.getresp()
  File "/usr/lib/python3.5/ftplib.py", line 245, in getresp
    raise error_perm(resp)
ftplib.error_perm: 550 /C++/: Permission denied.

现在我的问题(显然)是:我该如何解决这个问题?

【问题讨论】:

  • 这种情况会发生在名为“C++”以外的目录吗?
  • @pvg 是的,我已经尝试了其他几个...相同的结果
  • 您是否能够使用常规 ftp 客户端写入这些目录?更一般地说,如果您有任何其他协议选择,请使用它而不是 ftp
  • @pvg 是的,我已经使用了我的 wifi 路由器的 webclient,并将它集成到我的文件系统中,一切正常。我可以选择哪些其他协议,例如tcp?
  • 我不确定什么在哪里运行并连接到什么。但是您可以将内容 scp 到您的 ubuntu 盒子或通过 ssh 隧道连接到它并做任何事情。 ftp 是一个烦人且挑剔的双向协议,如果你能提供帮助,应该避免它。

标签: python python-3.x ftp python-3.5


【解决方案1】:

在您的self.ftp.cwd("/" + str(file) + "/") 行中,您将在路径的开头添加一个斜杠。请记住,在 Unix 中,以斜杠开头的路径是绝对路径,从根目录开始。

如果您的文件夹位于您的主目录中(根据它们的名称,我猜它们是)尝试将其更改为 self.ftp.cwd("~/" + str(file) + "/")。

【讨论】:

    猜你喜欢
    • 2023-01-26
    • 2021-01-26
    • 2014-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-26
    • 2012-05-01
    • 1970-01-01
    相关资源
    最近更新 更多