python将读取的usb数据写进文件_在linux上用python将文件写入usb

这篇博客介绍了如何在Linux环境下,使用Python脚本检测USB设备并将其挂载,以便将数据写入USB。博主分享了一个使用dbus和gobject的示例代码,监听USB设备的添加,并在设备挂载后进行操作。同时,讨论了在没有root权限的情况下使用mount命令的限制,以及如何使用autofs实现自动挂载USB设备。
摘要由CSDN通过智能技术生成

如果问题是如此愚蠢,我很抱歉,但我是

Linux和

python的新手.

关键是我需要编写一个python脚本来检测连接的usb棒并将文件写入其中.我使用的是opensuse(但是在任何

Linux发行版中,脚本都可以使用.)在理想情况下.如果安装了usb,当前版本可以检测usb并写入文件.但是在我的机器上只有在文件管理器中浏览它时才会安装usb.直到那个usb被检测为分离但没有挂载点.那么,我如何强制系统挂载usb或者如何使用devname或devpath或其他信息来编写一个文件,我可以从hal manager获取.我不能使用“mount”命令,因为它需要root权限

简化源代码:

import dbus, gobject, os

class DeviceAddedListener:

def __init__(self):

self.bus = dbus.SystemBus()

self.hal_manager_obj = self.bus.get_object( "org.freedesktop.Hal", "/org/freedesktop/Hal/Manager")

self.hal_manager = dbus.Interface(self.hal_manager_obj, "org.freedesktop.Hal.Manager")

self.hal_manager.connect_to_signal("DeviceAdded", self.added)

def show(self, name, udi):

d_object = self.bus.get_object('org.freedesktop.Hal', udi)

d_interface = dbus.Interface(d_object,'org.freedesktop.Hal.Device')

if d_interface.QueryCapability("volume"):

print name

props = [ "block.device", "volume.label", "volume.is_mounted", "volume.mount_point", "volume.size"]

for p in props:

print '\t', p, " = ",

try:

print d_interface.GetProperty(p)

except:

print "Fail"

def added(self, udi):

self.show("DeviceAdded", udi)

self.bus.add_signal_receiver(self.property_modified,

"PropertyModified",

"org.freedesktop.Hal.Device",

"org.freedesktop.Hal",

udi,

path_keyword = "sending_device" )

def property_modified(self, numupdates, updates, sending_device = None):

self.show("PropertyModified", sending_device)

if __name__ == '__main__':

from dbus.mainloop.glib import DBusGMainLoop

DBusGMainLoop(set_as_default=True)

loop = gobject.MainLoop()

DeviceAddedListener()

print "running"

loop.run()

usb插入时的输出

DeviceAdded

block.device = /dev/sdb1

volume.label = @

volume.is_mounted = 0

volume.mount_point =

volume.size = 4009722368

usb插入并安装时的输出

block.device = /dev/sdb1

volume.label = @

volume.is_mounted = 1

volume.mount_point = /media/@

volume.size = 4009722368

谢谢你的帮助!

您必须使用mount,因为出于安全原因,内核控制操作系统中的安装分区.您可以使用没有超级用户/管理员权限的安装.尝试这样的事情:

确保您要挂载的目录(/ mnt / usb1 /)已存在,然后

mount /dev/sdb1 /mnt/usb1 -o noauto,users,rw,umask=0

还有一种称为autofs的东西允许自动安装:

http://Linuxconfig.org/automatically-mount-usb-external-drive-with-autofs

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值