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 17:55 | Nová verze

    Ubuntu pro testování nových verzí vydává měsíční snapshoty. Dnes vyšel 1. snapshot Ubuntu 26.04 LTS (Resolute Raccoon).

    Ladislav Hagara | Komentářů: 0
    včera 14:33 | IT novinky

    Zástupci členských států EU se včera shodli na návrhu, který má bojovat proti šíření materiálů na internetu zobrazujících sexuální zneužívání dětí. Nařízení známé pod zkratkou CSAM a přezdívané chat control mělo množství kritiků a dlouho nebyla pro jeho schválení dostatečná podpora. Pro schválení byla potřeba kvalifikovaná většina a dánské předsednictví v Radě EU se snažilo dosáhnout kompromisu. Návrh nakonec po dlouhých týdnech

    … více »
    Ladislav Hagara | Komentářů: 8
    včera 12:22 | Zajímavý software

    Britské herní studio Facepunch stojící za počítačovými hrami Garry's Mod a Rust uvolnilo svůj herní engine s&box (Wikipedie) jako open source. Zdrojové kódy jsou k dispozici na GitHubu pod licencí MIT. Herní engine s&box je postavený nad proprietárním herním enginem Source 2 od společnosti Valve.

    Ladislav Hagara | Komentářů: 1
    včera 04:55 | Komunita

    Vývoj programovacího jazyka Zig byl přesunut z GitHubu na Codeberg. Sponzoring na Every.

    Ladislav Hagara | Komentářů: 1
    včera 04:44 | Komunita

    Stejně jako GNOME i KDE Plasma končí s X11. KDE Plasma 6.8 poběží už pouze nad Waylandem. Aplikace pro X11 budou využívat XWayland.

    Ladislav Hagara | Komentářů: 2
    26.11. 14:55 | IT novinky

    Poslanci Evropského parlamentu dnes vyzvali k výraznému zvýšení ochrany nezletilých na internetu, včetně zákazu vstupu na sociální sítě pro osoby mladší 16 let. Legislativně nezávazná zpráva, kterou dnes odsouhlasil Evropský parlament poměrem 493 hlasů pro ku 92 proti, kromě zavedení věkové hranice 16 let pro využívání sociálních sítí, platforem pro sdílení videí či společníků s umělou inteligencí (AI) vyzývá také k zákazu … více »

    Ladislav Hagara | Komentářů: 46
    26.11. 14:11 | Humor

    Doom v KiCadu nebo na osciloskopu? Žádný problém: KiDoom: Running DOOM on PCB Traces a ScopeDoom: DOOM on an Oscilloscope via Sound Card.

    Ladislav Hagara | Komentářů: 3
    26.11. 12:44 | Nová verze

    Po AlmaLinuxu byl v nové stabilní verzi 10.1 vydán také Rocky Linux. Přehled novinek v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    26.11. 04:00 | Zajímavý software

    Open source reimplementace počítačových her Tomb Raider I a Tomb Raider II spolu s dalšími vylepšeními a opravami chyb TRX byla vydána ve verzi 1.0. Jedná se o sloučení projektů / enginů TR1X a TR2X do jednoho TRX. Videoukázka na YouTube.

    Ladislav Hagara | Komentářů: 1
    25.11. 17:00 | IT novinky

    Společnost Seznam.cz spouští konverzační nástroj založený na umělé inteligenci Seznam Asistent. Asistent využívá vlastní jazykový model SeLLMa a dočasně i komerční modely od OpenAI provozované v evropských datacentrech prostřednictvím Microsoft Azure. Dlouhodobým cílem Seznamu je provozovat Asistenta výhradně na interních jazykových modelech a ve vlastních datových centrech.

    Ladislav Hagara | Komentářů: 8
    Jaké řešení používáte k vývoji / práci?
     (34%)
     (46%)
     (20%)
     (18%)
     (23%)
     (16%)
     (24%)
     (16%)
     (18%)
    Celkem 412 hlasů
     Komentářů: 17, poslední 19.11. 21:57
    Rozcestník

    Dotaz: Python otevření | pípy

    28.6.2009 17:36 filbar | skóre: 36 | blog: Denicek_programatora | Ostrava
    Python otevření | pípy
    Přečteno: 654×
    Mám problém s otevřením | pípy v Pythonu:
    os.mkfifo('/tmp/.powerman_fifo');
    self.pipe=os.open('/tmp/.powerman_fifo', os.O_WRONLY|os.O_NONBLOCK);
    
    Když spustím tento kód, tak mi to hlásí:
    Traceback (most recent call last):
      File "/media/JOOMLADEV/eclipse-src/python/PowerMan/src/powermangui.py", line 160, in <module>
        pg=PowerManGui();
      File "/media/JOOMLADEV/eclipse-src/python/PowerMan/src/powermangui.py", line 15, in __init__
        self.pipe=os.open('/tmp/.powerman_fifo', os.O_WRONLY|os.O_NONBLOCK);
    OSError: [Errno 6] No such device or address: '/tmp/.powerman_fifo'
    
    Přitom ta pipe existuje:
    ls -al /tmp/.powerman_fifo 
    prw-r--r-- 1 bartmann bartmann 0 2009-06-28 17:33 /tmp/.powerman_fifo
    

    Nevíte kde dělám chybu?

    Za rady předem děkuji.

    Odpovědi

    28.6.2009 18:31 12345 | skóre: 41 | blog:
    Rozbalit Rozbalit vše Re: Python otevření | pípy

    man 7 fifo říká tohle:

    A process can open a FIFO in non-blocking mode. In this case, opening for read only will succeed even if no-one has opened on the write side yet; opening for write only will fail with ENXIO (no such device or address) unless the other end has already been opened.

    OSError 6 je opravdu ENXIO:

    >>> import errno
    >>> errno.ENXIO
    6
    
    29.6.2009 08:03 filbar | skóre: 36 | blog: Denicek_programatora | Ostrava
    Rozbalit Rozbalit vše Re: Python otevření | pípy
    Tak jsem o kousek pokročil:
    self.state=os.read(self.pipe, 1000);
    OSError: [Errno 11] Resource temporarily unavailable
    

    Přitom na mám rouru v rodiči otevřenou a v dokumentaci jsem vyčetl, že při čtení z neblokující roury má vrátit 0 bytů.

    Postupuju, tak že si nejprve vytvořím instanci třídy PowerMan, v jejímž konstruktoru otvírám PIPU pro čteční, následně otevírám rouru pro zápis, volám fork() a v potomkovi volám metodu PowerMan.run, kde ve while 1: z roury čtu:

    if os.path.exists('/tmp/.powerman_fifo')==False:
    			os.mkfifo('/tmp/.powerman_fifo');
    		pm=powerman.PowerMan();
    		self.pipe=os.open('/tmp/.powerman_fifo', os.O_WRONLY|os.O_NONBLOCK);
    		self.state=True;
    		pid=os.fork();
    		if pid==0:
    			pm.run();
    
    Metoda run() třídy PowerMan:
    def run(self):
    		while 1:
    			self.state=os.read(self.pipe, 1000);
    			print self.state;
                            #Zpracovat obsah PIPE
    			if self.quit==True:
    				break;
    			if self.state==True:
    				self.get_idle();
    				self.get_idle_workaround();
    				if int(self.idle)>=int(self.stime):
    					pid=os.fork();
    					if pid==0:
    						self.idle=0;
    						os.execl(self.prog);
    					else:
    						os.wait();
    			time.sleep(1);
    
    29.6.2009 10:37 12345 | skóre: 41 | blog:
    Rozbalit Rozbalit vše Re: Python otevření | pípy

    Jestli jde jen o komunikaci rodičovského procesu s potomkem, není k tomu potřeba named pipe. Taková jednoduchá jednosměrná komunikace:

    import fcntl, os, time
    
    (rd, wr) = os.pipe()
    
    if os.fork() == 0:
    	os.close(wr)
    	fcntl.fcntl(rd, fcntl.F_SETFL, os.O_NONBLOCK)
    	print 'child: waiting for input'
    	while True:
    		try:
    			data = os.read(rd, 1000)
    			if data:
    				print 'child: received:', data
    		except OSError:
    			pass
    else:
    	os.close(rd)
    	while True:
    		data = raw_input('parent:> ')
    		os.write(wr, data)
    		time.sleep(.3) # aby se nesleval vystup potomka s rodicem
    

    Ukázka:

    $ python pipe.py
    child: waiting for input
    parent:> hello
    child: received: hello
    parent:> how are you?
    child: received: how are you?
    parent:>                         
    

    OSError 11 je v pořádku, je to obyčejné EAGAIN/EWOULDBLOCK (viz www.gnu.org/s/libc/manual/html_node/Error-Codes.html#index-EAGAIN-97).

    18.1.2010 16:16 Marcel
    Rozbalit Rozbalit vše Python
    Zdravím pánové, již je sice pozdě a asi nebudu přímo k věci, ale chtěl bych zde uvést svůj web pro další návštěvníky, kde jsem rozebíral základy této problematiky.

    Na webu http://networks.ic.cz průběžně aktualizuji věci které se týkají programování a webu a v sekci Python rozebírám jednotlivé moduly. Takže se kdyžtak mrkněte

    Modul subproces

    Modul fcntl

    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.