这是对这个问题的后续行动.我想知道你是否可以\\.\PhysicalDriveN在写入模式下访问原始设备(即),如果是这种情况,如何.
使用Linux,只需使用例如open("/dev/sdd", "w+")(假设脚本以root权限运行)即可实现写访问.我假设Mac OS的行为类似(与/dev/diskN输入文件一样).
在Windows下(使用相应的路径)尝试相同的命令时,它会失败,并显示以下错误:
IOError: [Errno 22] invalid mode ('w+') or filename: '\\\\.\\PhysicalDrive3'
Run Code Online (Sandbox Code Playgroud)
但是,当尝试从PhysicalDrive 读取时,它确实有效(即使读取正确的数据).shell在Windows 7下以管理员权限运行.
有没有其他方法可以使用python完成此任务,同时仍然保持脚本尽可能与平台无关?
我进一步了解了python为文件处理提供了哪些方法,并且在os.open中偶然发现了.使用os.open(drive_string, os.O_WRONLY|os.O_BINARY)返回没有错误打开PhysicalDrive .到现在为止还挺好.现在我可以选择使用os.write直接写入此文件描述符,或者使用os.fdopen获取文件对象并以常规方式写入它.可悲的是,这些可能性都不起作用.在第一种情况(os.write())中,我得到了这个:
>>> os.write(os.open("\\\\.\\PhysicalDrive3", os.O_WRONLY|os.O_BINARY), "test")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
OSError: [Errno 22] Invalid argument
Run Code Online (Sandbox Code Playgroud)
在第二种情况下,我可以创建一个具有写权限的文件对象,但写入本身失败(好吧,在使用后强制执行.flush()):
>>> g = os.fdopen(os.open("\\\\.\\PhysicalDrive3", os.O_WRONLY|os.O_BINARY), "wb")
>>> g.write("test")
>>> g.flush()
Traceback (most …Run Code Online (Sandbox Code Playgroud)