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
我现在就去吧!谢谢
我正在使用 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
我现在就去吧!谢谢