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í
×
eParkomat, startup z ČR, postoupil mezi finalisty evropského akcelerátoru ChallengeUp!
Robot na pivo mu otevřel dveře k opravdovému byznysu
Internet věcí: Propojený svět? Už se to blíží...
včera 21:21 | Nová verze Ladislav Hagara | Komentářů: 0
včera 11:44 | Zajímavý projekt

Na Indiegogo byla spuštěna kampaň na podporu herní mini konzole a multimediálního centra RetroEngine Sigma od Doyodo. Předobjednat ji lze již od 49 dolarů. Požadovaná částka 20 000 dolarů byla překonána již 6 krát. Majitelé mini konzole si budou moci zahrát hry pro Atari VCS 2600, Sega Genesis nebo NES. Předinstalováno bude multimediální centrum Kodi.

Ladislav Hagara | Komentářů: 0
včera 00:10 | Nová verze

Byla vydána verze 4.7 redakčního systému WordPress. Kódové označením Vaughan bylo vybráno na počest americké jazzové zpěvačky Sarah "Sassy" Vaughan. Z novinek lze zmínit například novou výchozí šablonu Twenty Seventeen, náhledy pdf souborů nebo WordPress REST API.

Ladislav Hagara | Komentářů: 1
6.12. 12:00 | Zajímavý projekt

Projekt Termbox umožňuje vyzkoušet si linuxové distribuce Ubuntu, Debian, Fedora, CentOS a Arch Linux ve webovém prohlížeči. Řešení je postaveno na projektu HyperContainer. Podrobnosti v často kladených dotazech (FAQ). Zdrojové kódy jsou k dispozici na GitHubu [reddit].

Ladislav Hagara | Komentářů: 25
6.12. 11:00 | Bezpečnostní upozornění

Byly zveřejněny informace o bezpečnostní chybě CVE-2016-8655 v Linuxu zneužitelné k lokální eskalaci práv. Chyba se dostala do linuxového jádra v srpnu 2011. V upstreamu byla opravena minulý týden [Hacker News].

Ladislav Hagara | Komentářů: 2
5.12. 22:00 | Komunita

Přibližně před měsícem bylo oznámeno, že linuxová distribuce SUSE Linux Enterprise Server (SLES) běží nově také Raspberry Pi 3 (dokumentace). Obraz verze 12 SP2 pro Raspberry Pi 3 je ke stažení zdarma. Pro registrované jsou po dobu jednoho roku zdarma také aktualizace. Dnes bylo oznámeno, že pro Raspberry Pi 3 je k dispozici také nové openSUSE Leap 42.2 (zprávička). K dispozici je hned několik obrazů.

Ladislav Hagara | Komentářů: 6
5.12. 06:00 | Zajímavý software

OMG! Ubuntu! představuje emulátor terminálu Hyper (GitHub) postavený na webových technologiích (HTML, CSS a JavaScript). V diskusi k článku je zmíněn podobný emulátor terminálu Black Screen. Hyper i Black Screen používají framework Electron, stejně jako editor Atom nebo vývojové prostředí Visual Studio Code.

Ladislav Hagara | Komentářů: 50
5.12. 06:00 | Zajímavý článek

I letos vychází řada ajťáckých adventních kalendářů. QEMU Advent Calendar 2016 přináší každý den nový obraz disku pro QEMU. Programátoři se mohou potrápit při řešení úloh z kalendáře Advent of Code 2016. Kalendáře Perl Advent Calendar 2016 a Perl 6 Advent Calendar přinášejí každý den zajímavé informace o programovacím jazyce Perl. Stranou nezůstává ani programovací jazyk Go.

Ladislav Hagara | Komentářů: 10
3.12. 16:24 | Nová verze

Byla vydána Mageia 5.1. Jedná se o první opravné vydání verze 5, jež vyšla v červnu loňského roku (zprávička). Uživatelům verze 5 nepřináší opravné vydání nic nového, samozřejmě pokud pravidelně aktualizují. Vydání obsahuje všechny aktualizace za posledního téměř půldruhého roku. Mageia 5.1 obsahuje LibreOffice 4.4.7, Linux 4.4.32, KDE4 4.14.5 nebo GNOME 3.14.3.

Ladislav Hagara | Komentářů: 17
3.12. 13:42 | Pozvánky

V Praze probíhá konference Internet a Technologie 16.2, volné pokračování jarní konference sdružení CZ.NIC. Konferenci lze sledovat online na YouTube. K dispozici je také archiv předchozích konferencí.

Ladislav Hagara | Komentářů: 0
Kolik máte dat ve svém domovském adresáři na svém primárním osobním počítači?
 (32%)
 (24%)
 (29%)
 (8%)
 (5%)
 (3%)
Celkem 785 hlasů
 Komentářů: 50, poslední 29.11. 15:50
Rozcestník
Reklama

Dotaz: python a ... zase disky

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

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.