我正在使用python 3.4和pysftp,(pysftp怀疑是在3.4上工作)
Pysftp是paramiko的包装.
我下载文件没问题.
我也可以上传小文件.
当我上传需要超过几秒钟的文件时,我会收到错误.我监控了我的互联网连接,大约3秒钟后就没有上传了.
约5分钟后,我收到了EOFError
我还尝试了paramiko模块,结果相同.
我可以使用open ssh以及filezilla上传文件而不会出现问题.
with pysftp.Connection(host="host",username="python",
password="pass",port=2222) as srv:
print('server connected')
srv.put(file_name)
Run Code Online (Sandbox Code Playgroud)
我希望能够上传大于几kb的文件......我缺少什么?
我正在使用Python 2.7 pysftp程序包连接到SFTP服务器。
import pysftp
DOWNLOAD = {
"USERNAME": "username",
"PASSWORD": "password"
}
FTP_SITE = 'sftp.mysite.com'
srv = pysftp.Connection(host=FTP_SITE, username=DOWNLOAD['USERNAME'],
password=DOWNLOAD['PASSWORD']
Run Code Online (Sandbox Code Playgroud)
当我运行上面的代码时,我得到了错误日志:
import pysftp
DOWNLOAD = {
"USERNAME": "username",
"PASSWORD": "password"
}
FTP_SITE = 'sftp.mysite.com'
srv = pysftp.Connection(host=FTP_SITE, username=DOWNLOAD['USERNAME'],
password=DOWNLOAD['PASSWORD']
Run Code Online (Sandbox Code Playgroud)
我目前正在通过执行以下操作来关闭对主机密钥的检查:
cnopts = pysftp.CnOpts()
cnopts.hostkeys = None
srv = pysftp.Connection(host=FTP_SITE, username=DOWNLOAD['USERNAME'],
password=DOWNLOAD['PASSWORD'], cnopts=cnopts)
Run Code Online (Sandbox Code Playgroud)
我想保留主机密钥的安全性功能。谁能提供有关如何生成主机密钥的链接,或者在此处提供一小段代码示例?我没找到太多。
我正在使用 pysftp 连接到服务器并向其上传文件。
cnopts = pysftp.CnOpts()
cnopts.hostkeys = None
self.sftp = pysftp.Connection(host=self.serverConnectionAuth['host'], port=self.serverConnectionAuth['port'],
username=self.serverConnectionAuth['username'], password=self.serverConnectionAuth['password'],
cnopts=cnopts)
self.sftp.put(localpath=self.filepath+filename, remotepath=filename)
Run Code Online (Sandbox Code Playgroud)
有时它没有错误,但有时它会正确放置文件,但会引发以下异常。该文件由服务器上运行的另一个程序读取和处理,因此我可以看到该文件在那里并且没有损坏
cnopts = pysftp.CnOpts()
cnopts.hostkeys = None
self.sftp = pysftp.Connection(host=self.serverConnectionAuth['host'], port=self.serverConnectionAuth['port'],
username=self.serverConnectionAuth['username'], password=self.serverConnectionAuth['password'],
cnopts=cnopts)
self.sftp.put(localpath=self.filepath+filename, remotepath=filename)
Run Code Online (Sandbox Code Playgroud)
我怎样才能防止异常?
我只需要从 python 脚本下载一个文件,所以代码很简单:
import pysftp
sftp = pysftp.Connection('test_host','test',password='test')
sftp.get('testfile', 'c:\\tmp\\testfile3')
Run Code Online (Sandbox Code Playgroud)
下载将开始并以正常速度进行几秒钟,然后停止。不再下载任何内容,几分钟后服务器将关闭连接。我正在连接的服务器的管理员出于“安全原因”不会透露服务器的任何详细信息,但他写信给我说,他可以看到如下错误:
SFTP 发送错误,并发客户端请求过多。客户端已超出服务器的内部缓冲区。
我可以从 python 代码中做些什么吗?
我正在尝试对一个 SFTP 帮助程序类进行单元测试,该类对 pysftp 模块进行一些调用。我想模拟来自 pysftp 的实际网络调用,因此没有副作用,只需确保该类使用正确的参数正确调用底层 SFTP 方法。
到目前为止,这是我的代码的一个简单示例:
import pysftp
import unittest
import mock
class SFTPHelper(object):
def __init__(self, host, username, password, files_dir):
self.host = host
self.username = username
self.password = password
self.files_dir = files_dir
def list_files(self):
with pysftp.Connection(
self.host,
username=self.username,
password=self.password) as sftp:
return sftp.listdir(self.files_dir)
class TestSFTPHelper(unittest.TestCase):
@mock.patch('pysftp.Connection')
def test_list_files(self, mock_connection):
sftp_helper = SFTPHelper('somehost', 'someuser', 'somepassword', '/some/files/dir')
sftp_helper.list_files()
# this assertion passes
mock_connection.assert_called_with(
'somehost', password='somepassword', username='someuser')
# this assertion does not pass
mock_connection.listdir.assert_called_with('/some/files/dir')
Run Code Online (Sandbox Code Playgroud)
断言错误:
AssertionError: Expected call: listdir('/some/files/dir') …Run Code Online (Sandbox Code Playgroud) 我正在使用 pysftp 模块创建备份脚本。我可以上传和下载文件。当我尝试删除包含某些内容的目录时,出现异常。
这是我试过的
con = pysftp.Connection('192.168.0.40',username='root',password='clado123')
con.chdir('/root/backup')
con.pwd
con.listdir()
['data', 'test']
data - directory is not empty.
test - directory is empty.
con.rmdir('test')
con.listdir()
['data']
con.rmdir('data')
Run Code Online (Sandbox Code Playgroud)
OSError:失败
任何人都可以建议我解决这个问题的方法吗?
我正在使用pysftp软件包运行Python 3,版本0.2.9.
我有以下代码.我正在正确加载主机密钥,如线所示cnopts.hostkeys.keys().
import pysftp
key_file_test = './path_to_key_file/key_file.pub'
DOWNLOAD_UAT = {
"USERNAME": "xxxxxxxx",
"PASSWORD": "xxxxxxxx"
}
UAT_FTP_SITE = 'sftp-test.site.com'
cnopts = pysftp.CnOpts()
cnopts.hostkeys.load(key_file_test)
cnopts.hostkeys.keys()
'''['github.com', 'XXX.XX.XXX.XXX', 'sftp-test.site.com']'''
srv = pysftp.Connection(host=UAT_SFTP_SITE, username=DOWNLOAD_UAT['USERNAME'],
password=DOWNLOAD_UAT['PASSWORD'], cnopts=cnopts, port=22)
Run Code Online (Sandbox Code Playgroud)
然后我运行最后一行时的错误是
---------------------------------------------------------------------------
SSHException Traceback (most recent call last)
<ipython-input-82-308ec955a92e> in <module>()
8
9 srv = pysftp.Connection(host=UAT_SFTP_SITE, username=DOWNLOAD_UAT['USERNAME'],
---> 10 password=DOWNLOAD_UAT['PASSWORD'], cnopts=cnopts, port=22)
11 data = srv.listdir()
C:\ProgramData\Anaconda3\lib\site-packages\pysftp\__init__.py in __init__(self, host, username, private_key, password, port, private_key_pass, ciphers, log, cnopts, default_path)
141 self._transport.use_compression(self._cnopts.compression)
142 self._set_authentication(password, private_key, …Run Code Online (Sandbox Code Playgroud) 我在 etl 工作(第一次),我需要从客户端的 SFTP 中提取一些文件。我的问题是,文件数量是可变的,所以我需要检查,如果文件中存在,并得到它,该文件格式,如“_文件YYYY-MM-DD -number- ñ ”,其中YYYY-MM-DD是当前的日期和n是文件的编号,因此如果有 7 个文件,我必须查找:
直到现在我发现我可以做这样的事情
cnopts = pysftp.CnOpts()
with pysftp.Connection(host=host, port=port, username=username, password=password, cnopts=cnopts) as sftp:
files = sftp.listdir(directory)
Run Code Online (Sandbox Code Playgroud)
我如何在那里的文件中找到?
我想使用 pysftp 0.2.8 将多个文件从 Windows 目录上传到 SFTP 服务器。我已经阅读了文档,它建议使用put_dorput_r但两者都给我以下错误:
OSError:无效路径:
sftp_local_path = r'C:\Users\Swiss\some\path'
sftp_remote_path = '/FTP/LPS Data/ATC/RAND/20191019_RAND/XML'
with pysftp.Connection("xxx.xxx.xxx.xxx", username=myUsername, password=myPassword) as sftp:
with sftp.cd(sftp_remote_path):
sftp.put_r(sftp_local_path, sftp_remote_path)
for i in sftp.listdir():
lstatout=str(sftp.lstat(i)).split()[0]
if 'd' in lstatout: print (i, 'is a directory')
sftp.close()
Run Code Online (Sandbox Code Playgroud)
我希望能够将本地目录中的所有文件或选定文件复制到 SFTP 服务器。
pysftp ×9
python ×9
sftp ×7
mocking ×1
paramiko ×1
python-2.7 ×1
python-3.x ×1
ssh ×1
unit-testing ×1
upload ×1