पर पायथन के साथ यूएसबी पर फ़ाइल लिखें, अगर प्रश्न इतना बेवकूफ है तो मैं क्षमा चाहता हूं लेकिन मैं लिनक्स और पायथन में नया हूं। मुद्दा यह है कि मुझे एक पायथन लिपि लिखनी है जो कनेक्ट यूएसबी स्टिक का पता लगाएगी और इसमें एक फाइल लिख जाएगी। मैं opensuse का उपयोग करता हूं (लेकिन आदर्श मामले में किसी भी लिनक्स distro के साथ स्क्रिप्ट shoild काम)। वर्तमान संस्करण यूएसबी का पता लगा सकता है और अगर वह यूएसबी घुड़सवार हो तो फाइल लिख सकता है। लेकिन मेरी मशीन यूएसबी पर केवल तभी घुड़सवार है जब मैं इसे फ़ाइल मैनेजर में ब्राउज़ करता हूं। जब तक यूएसबी एक पार्टियन के रूप में नहीं मिला लेकिन माउंट प्वाइंट के बिना। तो, मैं सिस्टम को यूएसबी को माउंट करने के लिए कैसे मजबूर कर सकता हूं या मैं देवनाम या देवपाथ या अन्य जानकारी जो मैं हेल मैनेजर से प्राप्त कर सकता हूं, का उपयोग कर फ़ाइल कैसे लिख सकता हूं। मैं उपयोग नहीं कर सकते "माउंट" कमांड है क्योंकि यह एक जड़ अनुमति की आवश्यकता हैलिनक्स
सरलीकृत स्रोत कोड:
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
उत्पादन जब यूएसबी प्लग इन है और घुड़सवार में खामियों को दूर
block.device = /dev/sdb1
volume.label = @
volume.is_mounted = 1
volume.mount_point = /media/@
volume.size = 4009722368
किसी भी मदद के लिए धन्यवाद!
आप 'माउंट' का उपयोग क्यों नहीं कर सकते? यदि 'माउंट 'काम नहीं करता है, तो आपका समाधान क्यों होगा? –
जब मैं माउंट का उपयोग करता हूं तो मेरे पास एक संदेश होता है "माउंट: केवल रूट ही ऐसा कर सकता है" – user1485818