我正在尝试使用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没有读取属性”。
有没有其他方法可以将此文件发送到服务器?
答案 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循环读取文件(参数是起始偏移量和要读取的数据量),允许你以一大块为例构造临时文件。几兆字节。
这只是一个简单的例子来说明你的问题。
哈努哈利