繁体   English   中英

如何使用pysftp将字符串写入ftp上的文件?

[英]How to write a string to file on ftp with pysftp?

我有一个存储在变量中的大型 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的引擎盖下,它只是一个薄包装。 因此,从服务器的角度来看,如果文件是直接从 FS 或内存上传的,则是完全透明的。

我找到了一个解决方案,不确定它是最好的:

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:

    f = sftp.open('/folder/filename.xml', 'wb')
    f.write('xml string')

编辑:发现为什么没有好的解决方案。 大多数 FTP 服务器会要求您直接放置文件,这可能是为了避免无休止的流。 所以我的最终解决方案是在本地创建文件并使用 pysft put()。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM