没有文件的文件操作?

时间:2011-08-13 18:59:44

标签: python

我正在开发一种自动化工具,它将一系列命令复制到远程系统上的文件中,然后ssh到远程系统并执行该文件。我正在查看paramiko的文档,它具有我需要的sftp和ssh命令功能。

但是,我注意到paramiko.SFTPClient.put()方法将本地和远程路径的名称作为参数。我希望能够不必首先在本地写入文件,并找到一种方法让SFTPClient.put接受类似文件的对象而不是指向实际文件。

有没有办法在python中通过将SFTPClient.put()作为对象引用而不是文件路径,或者如果SFTPClient.put()无法处理任何不是实际文件的命名管道来执行此操作?

4 个答案:

答案 0 :(得分:3)

只需open该文件并写入:

from __future__ import with_statement    
import contextlib

with contextlib.closing(sftpClient.open('file.name', 'w')) as f:
   f.write('myData')

答案 1 :(得分:0)

我相信你要找的是StringIO

答案 2 :(得分:0)

我不熟悉paramiko,但您可以使用tempfile-module创建临时文件。

from tempfile import mkstemp
from os import remove, fdopen
from os.path import exists

file, path = mkstemp()
file = fdopen(file)
# do stuff with paramiko

file.close()
if exists(path):
    remove(path)  # delete the file

编辑:更正了代码,因此它使用了tempfile-module的not-deprecated和safer函数。

答案 3 :(得分:0)

您可以使用Fabric:http://docs.fabfile.org/而不是自己实现它 Fabric有许多有用的API调用来在远程机器上执行命令。

如果您确实倾向于亲手操作,请使用NamedTemporaryFile。 SFTP是文件协议,因此预先准备文件并发送它是有意义的。

如果您确实不想准备文件,请使用:SFTPClient#open