我使用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
会返回None
。我知道dir
存在,因为如果我client.listdir()
它实际上返回了我想要下载的文件列表。这是一个错误吗?我错过了什么吗?
以下是详细信息:
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())
返回文件列表:
['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']
我知道dir存在是因为FTP是我的,我可以通过终端连接到它时浏览它。这些文件位于/ foo / bar目录中。
print(client.listdir("/foo/bar"))
或
print(client.chdir("/foo/bar"))
返回(无关紧要)
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日志文件中看不到任何兴趣
答案 0 :(得分:0)
您列出了根文件夹,但没有foo
文件夹。
因此,我们无法看到将文件夹更改为/foo/bar
的任何原因。
当您“通过终端连接到它时浏览它”时,您可以看到该文件夹这一事实与此无关。终端shell访问和FTP是两个不同的接口,不必返回相同的结果。
答案 1 :(得分:0)
我猜这是与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
我现在就去吧!感谢