Pytsk - 从磁盘映像将文件发送到服务器

时间:2017-01-27 11:30:28

标签: python server paramiko

我正在尝试使用paramiko将每个文件从磁盘映像发送到远程服务器。

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="http://code.highcharts.com/2.3.2/highcharts.js"></script>

<div id="container" style="height: 400px"></div>

然而,当我运行这个时,我得到一个错误,说“pytsk.File没有读取属性”。

有没有其他方法可以将此文件发送到服务器?

1 个答案:

答案 0 :(得分:0)

经过快速调查后,我想我发现了你的问题。 Paramiko的sftp.putfo期望将Python文件对象作为第一个参数。 Pytsk3的文件对象是完全不同的东西。您的sftp对象尝试执行&#34; read&#34;对此,但Pytsk3文件对象没有方法&#34;读&#34;,因此错误。

可以理论上尝试扩展Pytsk3.File类并添加这个方法,但我不会屏住呼吸它确实有用。

我只是将文件读取到临时文件并发送。像这样的东西(你需要让临时文件名处理更聪明,然后删除文件,但你会得到这个想法):

serverpath = '/home/Testing/' + name
tmp_path = "/tmp/xyzzy"
file_obj = fs.open_meta(inode = i_node)

# Add here tests to confirm this is actually a file, not a directory 

tha = open(tmp_path, "wb")
tha.write(file_obj.read_random(0, file_obj.info.meta.size))
tha.close()

rha = open(tmp_path, "rb")
sftp.putfo(rha, serverpath)
rha.close()
# Delete temp file here

希望这会有所帮助。这将从fs映像读取内存中的整个文件以写入临时文件,因此如果文件很大,则会耗尽内存。

要解决这个问题,你应该以适当的块中的read_random循环读取文件(参数是起始偏移量和要读取的数据量),允许你以一大块为例构造临时文件。几兆字节。

这只是一个简单的例子来说明你的问题。

哈努哈利