Python paramiko chdir 不起作用。 getcwd() returns None

Python paramiko chdir doesn't work. getcwd() returns None

我正在使用 paramiko 以这种方式连接到我的 FTP:

transport = paramiko.Transport((host, port))

transport.connect(
                  username=user,
                  password=pwd,
                  )

client = paramiko.SFTPClient.from_transport(transport)
client.chdir("/foo/bar/")

我收到这个错误:

FileNotFoundError: [Errno 2] No such file

并使用 getcwd returns None。我知道 dir 存在,因为如果我这样做 client.listdir() 它实际上是 returns 我要下载的文件列表。这是一个错误吗?我错过了什么吗?

所以这里是完整的细节:

paramiko.util.log_to_file(cwd/"paramiko.log")

transport = paramiko.Transport((host, port))
transport.connect(
                 username=user,
                 password=pwd,
                 )

client = paramiko.SFTPClient.from_transport(transport)
print(client.listdir())

returns 文件列表:

['Dax30_Call 2020-06 (Jun 2020).csv','Dax30_Put 2018-06 (Jun 2018).csv','EuroStoxx50_Call 2018-11 (Nov 2018).csv','EuroStoxx50_Put 2022-12 (Dec 2022).csv','EuroStoxx50_Call 2019-06 (Jun 2019).csv','EuroStoxx50_Call 2020-06 (Jun 2020).csv','EuroStoxx50_Call 2022-12 (Dec 2022).csv']

我知道目录存在,因为 FTP 是我的,通过终端连接到它时我可以浏览它。这些文件位于 /foo/bar 目录中。

print(client.listdir("/foo/bar"))

print(client.chdir("/foo/bar"))

returns(顺序无关)

Traceback (most recent call last):
  File "/media/Data/Dev/OptionChain/download_data.py", line 91, in <module>
print(client.listdir("/foo/bar"))
  File "/usr/local/lib/python3.6/site-packages/paramiko/sftp_client.py", line 186, in listdir
return [f.filename for f in self.listdir_attr(path)]
  File "/usr/local/lib/python3.6/site-packages/paramiko/sftp_client.py", line 207, in listdir_attr
t, msg = self._request(CMD_OPENDIR, path)
  File "/usr/local/lib/python3.6/site-packages/paramiko/sftp_client.py", line 780, in _request
return self._read_response(num)
  File "/usr/local/lib/python3.6/site-packages/paramiko/sftp_client.py", line 832, in _read_response
self._convert_status(msg)
  File "/usr/local/lib/python3.6/site-packages/paramiko/sftp_client.py", line 861, in _convert_status
raise IOError(errno.ENOENT, text)
FileNotFoundError: [Errno 2] No such file

我在 paramiko 日志文件中看不到任何有趣的东西

您列出了您的根文件夹,但没有 foo 文件夹。

所以我们看不出有任何理由可以将文件夹更改为 /foo/bar

当您 "browse it when connecting to it via terminal" 时您可以看到该文件夹​​这一事实与此处无关。终端 shell 访问和 FTP 是两个不同的界面,不一定 return 相同的结果。

我猜这与 sftp 用户权限有关

$ ssh user1@xx.xx.xx.xxx -p22
$ cd /foo/bar
$ ls 
'Dax30_Call 2018-06 (Jun 2018).csv','Dax30_Put 2019-03 (Mar 2019).csv'

$ realpath 'Dax30_Call 2018-06 (Jun 2018).csv'
'/foo/bar/Dax30_Call 2018-06 (Jun 2018).csv'

$ sftp -v -P 22 user2@xx.xx.xx.xxx
sftp> pwd
Remote working directory: /bar

我现在就去吧!谢谢