abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
včera 02:20 | Zajímavý článek

David Revoy, autor open source webového komiksu Pepper&Carrot nebo portrétu GNU/Linuxu, upozorňuje na svém blogu, že nový Inkscape 0.92 rozbíjí dokumenty vytvořené v předchozích verzích Inkscape. Problém by měl být vyřešen v Inkscape 0.92.2 [reddit].

Ladislav Hagara | Komentářů: 0
včera 02:02 | Komunita

Øyvind Kolås, hlavní vývojář grafických knihoven GEGL a babl, které využívá grafický program GIMP, žádá o podporu na Patreonu. Díky ní bude moci pracovat na vývoji na plný úvazek. Milník 1000 $, který by stačil na holé přežití, se již téměř podařilo vybrat, dalším cílem je dosažení 2500 $, které mu umožní běžně fungovat ve společnosti.

xkomczax | Komentářů: 12
21.1. 23:54 | Pozvánky

DevConf.cz 2017, již devátý ročník jedné z největších akcí zaměřených na Linux a open source ve střední Evropě, proběhne od pátku 27. ledna do neděle 29. ledna v prostorách Fakulty informačních technologií Vysokého učení technického v Brně. Na programu je celá řada zajímavých přednášek a workshopů. Letos je povinná registrace.

Ladislav Hagara | Komentářů: 0
21.1. 22:11 | Nová verze

Byla vydána verze 1.0.0 emulátoru terminálu Terminology postaveného nad EFL (Enlightenment Foundation Libraries). Přehled novinek v poznámkách k vydání.

Ladislav Hagara | Komentářů: 0
20.1. 17:00 | Nová verze

Byl vydán Docker 1.13. Přehled novinek na YouTube a v poznámkách k vydání na GitHubu. Docker umožňuje běh aplikací v softwarových kontejnerech (Wikipedia).

Ladislav Hagara | Komentářů: 4
20.1. 15:51 | Komunita

Mozilla.cz informuje, že nástroje pro webové vývojáře se možná oddělí od Firefoxu a stanou doplňkem. Nástroje pro webové vývojáře prošly velkým přepisem a tým, který se stará o jejich vývoj, by uvítal možnost jejich častějších aktualizacích nezávisle na vydávání nových verzí Firefoxu.

Ladislav Hagara | Komentářů: 10
20.1. 07:00 | Humor

Čtenářům AbcLinuxu vše nejlepší k dnešnímu Dni zvýšení povědomí o tučňácích (Penguin Awareness Day).

Ladislav Hagara | Komentářů: 0
20.1. 06:00 | Komunita

Bylo spuštěno hlasování o přednáškách a workshopech pro letošní InstallFest, jenž proběhne o víkendu 4. a 5. března v Praze. Současně byla oznámena změna místa. InstallFest se letos vrací zpět na Karlovo náměstí do budovy E.

Ladislav Hagara | Komentářů: 0
20.1. 02:48 | Komunita

Greg Kroah-Hartman potvrdil, že Linux 4.9 je jádrem s prodlouženou upstream podporou (LTS, Long Term Support). Podpora je plánována do ledna 2019. Aktuální jádra s prodlouženou podporou jsou tedy 3.2, 3.4, 3.10, 3.12, 3.16, 3.18, 4.1, 4.4 a 4.9.

Ladislav Hagara | Komentářů: 0
20.1. 00:11 | Zajímavý článek

Výrobce síťových prvků, společnost Netgear, spustila nový program, který slibuje vývojářům, expertům, ale i běžným uživatelům vyplacení finanční odměny za nalezení bezpečnostních chyby v jejich produktech. Za nalezení zranitelnosti v hardware, API nebo mobilní aplikaci nabízí odměnu od 150 do 15 tisíc dolarů (dle závažnosti).

Michal Makovec | Komentářů: 0
Jak se stavíte k trendu ztenčování přenosných zařízení (smartphony, notebooky)?
 (10%)
 (2%)
 (74%)
 (3%)
 (10%)
Celkem 363 hlasů
 Komentářů: 25, poslední 21.1. 13:34
Rozcestník
Reklama

Dotaz: python a ... zase disky

23.7.2014 12:12 Milan
python a ... zase disky
Přečteno: 411×

Zdravím všechny ..

nedávno jsem se tady dotazoval, jak oddělím zrno od plév (soubory a /*teď už vím, že se to jmenuje */ nody ). Dalším googlením jsem se dostal až ke knihovně pylibparted (stará, neudržovaná, ale dobře se s tím pracuje, no, a hlavně, je v opensuse repu.

Nicméně ... knihovna má problém ( spíše to bude vlastnost ) s CDROMkou, některé funkce na tom padají, a pro mnou zamýšlený program stejně o práci s CDROMkou neuvažuju.

Ok, takže zase odděluji zrno od plév. Otázka zní, jak poznám, že nod patří CDROMce ?.

Jedna možnost se nabízí načíst si /proc/partitions a pylibparted se dotázat na path (pylibparted.PedDevice.getPath() ) k zařízení a tuto cestu najít v partitions, kde máme major minor, podle http://lxr.free-electrons.com/source/include/uapi/linux/major.h?v=3.14 tohoto nějak určit, že dané zařízení je CD, a loopnout se na další zařízení v pořadí (tj, nepokračovat dalším očucháváním CDčka ).

Tato konstrukce může fungovat, ale pak jsem si uvědomil, že mc a dokonce i ls -l mi prásknou major minor u nodu, tak proč to takto zdaleka obcházet?

Hm, ale teď nemůžu přijít na to, jak se k major minor v pythonu dostanu.

os.stat sice vrací st_dev, ale u těch nodů je to míněno asi jako device, kde leží (možná ani to ne, protože to, co se mi vrací, není stejné číslo jako v partitions ... moc o tom nevím).

Prolézal jsem další možnosti, zkusil jsem googlit, ale rozmanitost ( a nepoužitelnost )  nalezených výsledků mne opět zahnala tam "kde mi rozumějí " :-D ) tak snad jste to pochopili,

předem díky za nápovědu.

Milan


Řešení dotazu:


Odpovědi

23.7.2014 14:42 Sten
Rozbalit Rozbalit vše Re: python a ... zase disky
Otázka je, jestli opravdu potřebujete zjistit, že je to CD-ROM, nebo stačí zjistit, že tam není médium (můj odhad, proč to padá).

To první lze zjistit tak, že tomu zařízení pošlete nějaký příkaz pro CD-ROM (doporučuji nějaký informační příkaz, třeba CDROM_GET_CAPABILITY). Pokud to CD-ROM není, tak řekne, že to neumí.

To druhé je ještě jednodušší. Při pokusu to zařízení otevřít dostanete chybu “No medium found” (ENOMEDIUM).
23.7.2014 20:44 Milan Uhrák | skóre: 25 | blog: milan_at_ABC
Rozbalit Rozbalit vše Re: python a ... zase disky
Aha, no ono to právě kiksuje, když je zasunutý disk .. jinak ta enumerace mechaniku přeskočí. To jsem měl napsat ..

V pylibparted jsem nenašel žádnou funkci, která by mi řekla : toto je harddisk, toto je CD ... toto je páska a podobně. Atributy major minor jména zařízení by mi to řeklo, ale nevím, jak je získat.
23.7.2014 15:26 graviton
Rozbalit Rozbalit vše Re: python a ... zase disky
Takhle?

os.stat("/dev/sr0").st_rdev >> 8
23.7.2014 21:06 Milan Uhrák | skóre: 25 | blog: milan_at_ABC
Rozbalit Rozbalit vše Re: python a ... zase disky
ááááá ... teď jste mne dostal ...

st_rdev je ta kouzelná formulka .. jak jsem to mohl přehlídnout, když jsem koukal na os.stat .. nechápu a vám díky ..

Milan
24.7.2014 10:47 graviton
Rozbalit Rozbalit vše Re: python a ... zase disky
Ono to ve výsledku z os.stat na rozdíl od ostatních věcí není vidět jako datová položka (asi metoda?), člověk musí zabloudit do dokumentace, aby se dozvěděl, na co že se to má zeptat.
29.7.2014 14:45 Milan Uhrák | skóre: 25 | blog: milan_at_ABC
Rozbalit Rozbalit vše Re: python a ... zase disky
Nakonec jsem to zmastil takto :
import pylibparted, os (a možná ještě něco)
def collect_disks( ):
	result = { }

	devs = pylibparted.probeAllDevices()

	for p in devs :
		# Device
		d = pylibparted.PedDevice(p)
		devpath = d.getPath()
		devpath_stat = os.stat(devpath)
		d_mode = devpath_stat.st_mode
		if (  d_mode & 24576  <> 24576 ) :
			#print 'Device:', devpath,  ' is not block'
			continue
		d_major = devpath_stat.st_rdev >> 8
		#print d_major
		if ( not d_major in (8, 3, 22 ) ):
			#print "Device ",  devpath, ' is not a disk'
			continue
		result[ devpath ] = {}
		model = d.getModel()
		#print 'Model: ',  model
		result[ devpath ][ 'model' ] = model
		result[ devpath ][ 'type' ] = 'D'
		#print 'Device type :',  d.getType()
		size = d.getLength()
		#print 'Size:', size
		result[ devpath ][ 'size' ] = size
		ssize =  d.getSectorSize()
		#print 'Sector size: ', ssize
		result[ devpath ][ 'ssize' ] = ssize
		disktype = d.diskProbe()
		subtype = disktype.getName()
		#print'Name: ',  subtype
		result[ devpath ][ 'subtype' ] = subtype
		c,h,s = d.getBiosCHS()
		chs = str(c) + '/' + str(h) + '/' + str(s)
		#print 'BIOS CHS:', chs

		c,h,s = d.getHwCHS()
		chs = str(c) + '/' + str(h) + '/' + str(s)
		#print 'HW CHS:', chs

		# Partition table
		pt = d.diskNew()
		parts = pt.getPartitions()

		for part in parts :
			if part.isActive() :
				part_path = part.getPath()
				#print ' Partition:', part_path
				result[ part_path ] = {}
				result[ part_path ]['type'] = 'P'

				parttype = part.getTypeName()
				#print ' Type Name:', parttype
				#print ' ID:', part.getId()
				result[ part_path ][ 'model' ] = parttype
				geom = part.getGeometry()

				#print '  Start:', geom.getStart()
				#print '  End:', geom.getEnd()
				size = geom.getLength()
				#print '  Length:', size
				result[ part_path ][ 'ssize' ] = ssize
				result[ part_path ][ 'size' ] = size
				fs = part.getFsType()
				if fs :
					#print '  FS:', fs.getName()
					result[ part_path ]['subtype'] = fs.getName()
	    # parts
	# devs
	return result

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267   www.czech-server.cz
© 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.