我正在编写一个到目前为止看起来像这样的小型取证应用程序
import time, os,sys
def getter():
filename = sys.argv[1]
print "File Entered: " + filename
os.system('file ' + filename)
print "\n"
pipe = os.popen("xxd " + filename, "r")
print pipe.read()
我通过命令行输入一个文件,它打印出文件的类型,然后它应该在管道名称“pipe”下创建一个从终端返回到 python 应用程序的管道。然后我读了名为“pipe”的管道
这适用于较小的文本文件,但它不适用于 block 设备,即使我以 super 用户身份运行此应用程序也是如此。最后,这将根据 xxd 的输出恢复文件。
任何提示,谢谢。
请您参考如下方法:
我假设您已经在 shell 提示符下尝试了相同的命令,并且它运行良好,即使在通过管道传输到 less 或类似的东西时也是如此。
我有一种强烈的感觉,使用 subprocess将修复此行为;此模块取代了已弃用的 popen 调用,并在运行命令和从执行的命令获取结果方面提供了很大程度的灵 active 。
output = Popen(["xxd", "file"], stdout=PIPE).communicate()[0]
尝试在它自己的 shell 下运行该进程,并读取它的管道。如果这仍然不起作用,请确保为其缓冲区大小设置一个合理的限制,并确保您没有使用 communicate 这会让您等到进程终止(处理时很长时间 block 设备)。
如果我的答案不起作用,请评论它,并尝试准确描述哪里出了问题 - 是卡住、没有输出还是损坏的结果?
