我有一个大的 xml 文件存储在变量中。我想使用 pysftp 将其直接写入 ftp。
我相信我需要使用 pysftp.putfo 这需要一个类似文件的对象。这是一个最小的例子:
from io import StringIO
from pysftp import Connection, CnOpts
cnopts = CnOpts()
cnopts.hostkeys = None
with Connection('localhost'
,username= 'admin'
,password = 'test'
,cnopts=cnopts
) as sftp:
sftp.putfo(StringIO('xml string'))
我收到以下错误:
TypeError: Expected unicode or bytes, got None
我究竟做错了什么?是否有一种更简单、更好的方法来实现我将字符串变量写入 ftp 上的文件的目标?
您的第一种方法是有效的,只需指定一个文件名即可。内存中的文件没有默认名称,并且 pysftp 不知道如何命名目标文件。
from io import StringIO
from pysftp import Connection
with Connection('localhost', ...) as sftp:
sftp.putfo(StringIO('xml string'), 'test.txt')
它应该可以工作。另外,作为旁注 - Paramiko(pysftml 使用的库)put
操作是在幕后调用的putfo
,它只是一个薄薄的包装纸。所以从服务器的角度来看,如果文件是直接从文件系统或内存上传的,那么它是完全透明的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)