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

时间:2018-06-05 11:02:50

标签: python sftp paramiko

我使用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日志文件中看不到任何兴趣

2 个答案:

答案 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

我现在就去吧!感谢