Re: [python] multiprocess problem se sirotkem
On 09/05/2012 10:12 AM, Jirka Vejrazka wrote: Zni to jako chyba v navrhu uz v principu :0 To jiste je. Celery (resp. jeho zavislosti) je trochu velke zvire na takovou drobnost. Co treba mit na tom stroji s standardne pusteny Pyhton process, ktery se bude starat o ty dlouho bezici ulohy a ten CGI skript mu jenom preda potrebne vstupni parametry pres multiprocessing.Queue? Presne o tomto jsem take premyslel. Budu tedy muset trochu upravit. Diky -- Tomas Pelka ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] multiprocess problem se sirotkem
Aha takze ani daemon = True nepomuze, chjo tak to budu muset udelat jinak. Ale zatim me nenapada jak :/ On Wed 05 Sep 2012 09:56:08 AM CEST, azurIt wrote: Ahoj, proces je ukonceny pretoze jeho parent skoncil (proces web serveru -> CGI skript). Ak si na linuxe, tak toto nie je mozne takymto sposobom urobit (resp. nie je mi znamy sposob). Ine OS neviem. azur __ Od: "Tomas Pelka" Komu: Dátum: 05.09.2012 09:51 Predmet: [python] multiprocess problem se sirotkem Zdravim vsechny, resim nasledujici problem a verim, ze mi nekdo z vas pomuze. Potrebuji z cgi skriptu (interpretuje jej jednoduchy httpserver) pustit dlouho bezici ulohu ale tak abych nemusel volat mutiprocess.join(), protoze pak stranka zustane viset. Jak jsem zminil pouzivam k tomu multiprocess, ktery pouze nastartuji ale nejoinu. Vse ale nasvercuje tomu, ze proces je zabyt i kdyz by mel byt daemonem. import multiprocess mp = Process(target=__handle_execution, args=(args,)) mp.daemon = True mp.start() -- zde je konec cgi skriptu -- Ma nekdo s podobnym chovanim zkusenosti? Diky -- Tomas Pelka -- ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python -- Tomas Pelka ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
[python] multiprocess problem se sirotkem
Zdravim vsechny, resim nasledujici problem a verim, ze mi nekdo z vas pomuze. Potrebuji z cgi skriptu (interpretuje jej jednoduchy httpserver) pustit dlouho bezici ulohu ale tak abych nemusel volat mutiprocess.join(), protoze pak stranka zustane viset. Jak jsem zminil pouzivam k tomu multiprocess, ktery pouze nastartuji ale nejoinu. Vse ale nasvercuje tomu, ze proces je zabyt i kdyz by mel byt daemonem. import multiprocess mp = Process(target=__handle_execution, args=(args,)) mp.daemon = True mp.start() -- zde je konec cgi skriptu -- Ma nekdo s podobnym chovanim zkusenosti? Diky -- Tomas Pelka ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] multiprocess manager
On 07/26/2010 09:52 PM, Tomas Pelka wrote: Zdravim vsechny, mam potize s exportovanim objektu pres manager z modulu multiprocess, priklad: Worker.py: ### from multiprocessing import Process from multiprocessing.managers import BaseManager import pcapy from impacket.ImpactDecoder import EthDecoder __all__ = ['Worker'] class Worker(Process): ''' Class for sniffing packets, runnig as root ''' public = ['go', 'terminate'] def __init__(self): super(Worker, self).__init__() self.iface = '' self.expr = '' self.pcap = '' # define packet decoder self.decoder = EthDecoder() # key for queue daemon, remotely on localhost:5000 self._keyQ = '10b222970537b97919db36ec757370d2' class QueueManager(BaseManager): pass QueueManager.register('get_dataQueue') self._m = QueueManager(address=('127.0.0.1', 5000), authkey=self._keyQ) self._m.connect() self.dataQueue = self._m.get_dataQueue() def go(self, iface, expr): ''' start sniffer ''' print "Starting sniffer" self.iface = iface self.expr = expr super(Worker, self).start() def terminate(self): ''' terminate sniffer ''' super(Worker, self).terminate() def run(self): print "sniffing ..." print self.iface print self.expr self.pcap = pcapy.open_live(self.iface, 1500, 1, 0) self.pcap.setfilter(self.expr) self.pcap.loop(0, self.__packetHandler) print "... done" def __packetHandler(self, hdr, data): ''' handles packets and put them in to the queue ''' print "Handling packets" #print data print "Queue size: %i" % self.dataQueue.qsize() print self.decoder.decode(data) self.dataQueue.put(data) Export objektu (Worker): ### from Worker import Worker class SniffManager(BaseManager): pass SniffManager.register('Worker', callable=Worker) Sm = SniffManager(address=('127.0.0.1', 5001), authkey='f1f16683f3e0208131b46d37a79c8921') Ss = Sm.get_server() Ss.serve_forever() Volani metod objektu, vzdalene: ### # get remote object class WorkerManager(BaseManager): pass WorkerManager.register('Worker') w = WorkerManager(address=('127.0.0.1', 5001), authkey='f1f16683f3e0208131b46d37a79c8921') w.connect() worker = w.Worker() #TOHLE FUNGUJE JAK MA ale worker.terminate() File "/home/tom/web2py/applications/init/controllers/sniffer.py", line 143, in index worker.terminate() File "", line 2, in terminate File "/usr/lib/python2.6/multiprocessing/managers.py", line 740, in _callmethod raise convert_to_error(kind, result) AttributeError: 'NoneType' object has no attribute 'terminate' Zarazi me ze go() funguje a terminate() nikoliv. Lokalne funfuje vse tak jak ma. Diky za rady. Nejzvlastnejsi mi prijde to ze super(Worker, self).terminate(), tedy super(Worker, self) je podle pythonu NoneType. -- Tomas Pelka ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] multiprocess manager
On 07/27/2010 09:20 AM, Tomas Pelka wrote: On 07/27/2010 08:49 AM, Jirka Vejrazka wrote: Ahoj, me to po ranu moc nemysli, tak me ber s rezervou :) worker = w.Worker() #TOHLE FUNGUJE JAK MA Po tomto ma jeste nasledovat jeden radek worker.go('eth2', 'tcp port 22') # napriklad Urcite? Neber to ve zlem, ale mas jistotu, ze to startuje ten spravny Worker? Uz je to dlouho, co jsem si s timhle hral, ale koukal jsem ted do nejakeho stareho kodu a tam jsem nasel neco, co by u tebe vypadalo asi takhle: from Worker import Worker class WorkerManager(BaseManager): pass WorkerManager.register('Worker', Worker) # ma 2 parametry! No to by ale znamenalo ze Worker musi byt nekde definovany, nebo importovany (from worker import Worker) a pak by to volani metod na remote objektech ztracelo smysl. Jinak se to chova stejne v obou pripadech, tedy WorkerManager.register('Worker', Worker) i WorkerManager.register('Worker'). Navic nikde nevidim, ze bys volal WorkerManager.start(), vypada to, ze cely multiprocessing vlastne nefunguje, budes se na to muset jeste trochu podivat. Vim, ze to neni uplne skvela rada, ale zacni od mensich veci a vyzkousej si na nich jak multiprocessing funguje, sniffovani paketu mezi ne nepatri :-) Rikam to jenom proto, ze jsem prosel stejnou cestu jako ty a nakonec jsem skoncil u neceho radove slozitejsiho nez jsem cekal. Par poznamek na okraj: - mel jsem podobne problemy jako ty, neslo mi volat terminate() na vzdalenem procesu. Nakonec jsem skoncil se specialni "ridici frontou", kam jsem tomu vzdalenemu procesu poslal vzkaz, aby se ukoncil sam. To fungovalo. - myslim, ze definovat QueueManager ve Worker.__init__() je spatne jak koncepcne, tak technicky Muzu pozadat o male vysvetleni. Proc myslis, ze koncepce je spatna? Bylo by lepsi predavat frontu jako parametr? (nejsem si jisty, jestli to multiprocessing zvladne, spustit manager teoreticky na jinem stroji). Navic se zda, ze mu taky chybi start(). Start tady neni treba protoze se jedna jen o objekt fronty a ne proces. Ano start() chybi, mas pravdu, viz vyse. - mrkni se na PEP08 ;-) Porad si ten code style nemuzu zazit :) Jak jsem psal, rano neni moje nejlepsi doba, tak me ber s rezervou ;-) Jirka ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python Diky za podnetne nazory. -- Tomas Pelka ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] multiprocess manager
On 07/27/2010 08:49 AM, Jirka Vejrazka wrote: Ahoj, me to po ranu moc nemysli, tak me ber s rezervou :) worker = w.Worker() #TOHLE FUNGUJE JAK MA Po tomto ma jeste nasledovat jeden radek worker.go('eth2', 'tcp port 22') # napriklad Urcite? Neber to ve zlem, ale mas jistotu, ze to startuje ten spravny Worker? Uz je to dlouho, co jsem si s timhle hral, ale koukal jsem ted do nejakeho stareho kodu a tam jsem nasel neco, co by u tebe vypadalo asi takhle: from Worker import Worker class WorkerManager(BaseManager): pass WorkerManager.register('Worker', Worker) # ma 2 parametry! Navic nikde nevidim, ze bys volal WorkerManager.start(), vypada to, ze cely multiprocessing vlastne nefunguje, budes se na to muset jeste trochu podivat. Vim, ze to neni uplne skvela rada, ale zacni od mensich veci a vyzkousej si na nich jak multiprocessing funguje, sniffovani paketu mezi ne nepatri :-) Rikam to jenom proto, ze jsem prosel stejnou cestu jako ty a nakonec jsem skoncil u neceho radove slozitejsiho nez jsem cekal. Par poznamek na okraj: - mel jsem podobne problemy jako ty, neslo mi volat terminate() na vzdalenem procesu. Nakonec jsem skoncil se specialni "ridici frontou", kam jsem tomu vzdalenemu procesu poslal vzkaz, aby se ukoncil sam. To fungovalo. - myslim, ze definovat QueueManager ve Worker.__init__() je spatne jak koncepcne, tak technicky (nejsem si jisty, jestli to multiprocessing zvladne, spustit manager teoreticky na jinem stroji). Navic se zda, ze mu taky chybi start(). Ano start() chybi, mas pravdu, viz vyse. - mrkni se na PEP08 ;-) Porad si ten code style nemuzu zazit :) Jak jsem psal, rano neni moje nejlepsi doba, tak me ber s rezervou ;-) Jirka ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python -- Tomas Pelka ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
[python] multiprocess manager
Zdravim vsechny, mam potize s exportovanim objektu pres manager z modulu multiprocess, priklad: Worker.py: ### from multiprocessing import Process from multiprocessing.managers import BaseManager import pcapy from impacket.ImpactDecoder import EthDecoder __all__ = ['Worker'] class Worker(Process): ''' Class for sniffing packets, runnig as root ''' public = ['go', 'terminate'] def __init__(self): super(Worker, self).__init__() self.iface = '' self.expr = '' self.pcap = '' # define packet decoder self.decoder = EthDecoder() # key for queue daemon, remotely on localhost:5000 self._keyQ = '10b222970537b97919db36ec757370d2' class QueueManager(BaseManager): pass QueueManager.register('get_dataQueue') self._m = QueueManager(address=('127.0.0.1', 5000), authkey=self._keyQ) self._m.connect() self.dataQueue = self._m.get_dataQueue() def go(self, iface, expr): ''' start sniffer ''' print "Starting sniffer" self.iface = iface self.expr = expr super(Worker, self).start() def terminate(self): ''' terminate sniffer ''' super(Worker, self).terminate() def run(self): print "sniffing ..." print self.iface print self.expr self.pcap = pcapy.open_live(self.iface, 1500, 1, 0) self.pcap.setfilter(self.expr) self.pcap.loop(0, self.__packetHandler) print "... done" def __packetHandler(self, hdr, data): ''' handles packets and put them in to the queue ''' print "Handling packets" #print data print "Queue size: %i" % self.dataQueue.qsize() print self.decoder.decode(data) self.dataQueue.put(data) Export objektu (Worker): ### from Worker import Worker class SniffManager(BaseManager): pass SniffManager.register('Worker', callable=Worker) Sm = SniffManager(address=('127.0.0.1', 5001), authkey='f1f16683f3e0208131b46d37a79c8921') Ss = Sm.get_server() Ss.serve_forever() Volani metod objektu, vzdalene: ### # get remote object class WorkerManager(BaseManager): pass WorkerManager.register('Worker') w = WorkerManager(address=('127.0.0.1', 5001), authkey='f1f16683f3e0208131b46d37a79c8921') w.connect() worker = w.Worker() #TOHLE FUNGUJE JAK MA ale worker.terminate() File "/home/tom/web2py/applications/init/controllers/sniffer.py", line 143, in index worker.terminate() File "", line 2, in terminate File "/usr/lib/python2.6/multiprocessing/managers.py", line 740, in _callmethod raise convert_to_error(kind, result) AttributeError: 'NoneType' object has no attribute 'terminate' Zarazi me ze go() funguje a terminate() nikoliv. Lokalne funfuje vse tak jak ma. Diky za rady. -- Tomas Pelka ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
[python] scapy a serializace paketu
Zdravim vsechny, mam maly problem s ukladanim scapy paketu do fronty (multiprocess). Priklad: from multiprocessing import Process from multiprocessing.managers import BaseManager from scapy.all import sniff class Worker(Process): ''' Class for sniffing packets, runnig as root ''' def __init__(self): super(Worker, self).__init__() self.iface = '' self.expr = '' # key for queue daemon, remotely on localhost:5000 self._keyQ = '10b222970537b97919db36ec757370d2' class QueueManager(BaseManager): pass QueueManager.register('get_dataQueue') self._m = QueueManager(address=('127.0.0.1', 5000), authkey=self._keyQ) self._m.connect() self.dataQueue = self._m.get_dataQueue() def go(self, iface, expr): print "Starting sniffer" self.iface = iface self.expr = expr super(Worker, self).start() def run(self): print "sniffing ..." print self.iface print self.expr print self.dataQueue packets = sniff(filter=self.expr, count=10, timeout=10, iface=self.iface) print packets self.dataQueue.put(packets) print "... done" But always getting: Traceback (most recent call last): File "/usr/lib/python2.6/multiprocessing/process.py", line 232, in _bootstrap self.run() File "/home/tom/web2py/applications/NetSim/DAEMON/Worker.py", line 32, in run self.dataQueue.put(packets) File "", line 2, in put File "/usr/lib/python2.6/multiprocessing/managers.py", line 725, in _callmethod conn.send((self._id, methodname, args, kwds)) PicklingError: Can't pickle : attribute lookup __builtin__.function failed PAkety nejsou snad serializovatelne? Nesetkal se s touto chybou uz nekdo drive? Diky za rady -- Tomas Pelka ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] multiprocess a subprocess
Petr Messner wrote: > Předpokládám, že místo foo() je myšleno spouštění webového serveru přes Popen > z bar(). Mě tento kód funguje, příkaz se spustí. Asi bude chyba někde jinde. > Často pomůže podívat se přes strace, co to vlastně dělá (myslím příkaz strace > v Linuxu nebo něco podobného v jiných OS). Raději sem ale pošlete větší kus > zdrojového kódu, nebo vysvětlete, o co se snažíte, webový server se v Pythonu > dá spustit i jednoduššími způsoby. > No spoustim web2py, s tim ze je to zbytecne slozite souhlasim. > Jinak by bylo pěkné k ukázce kódu doplnit i příslušné importy, aby se kód dal > co nejsnáze spustit a vyzkoušet. import os, pwd, sys from multiprocessing import Process, Manager, Queue from subprocess import Popen, PIPE Napadlo me jestli nebude problem s p.communicate() ale v tom problem nebyl. > > PM > > On 16.4.2010, at 23:56, Tomas Pelka wrote: > >> Zdravim, >> >> mam maly problem, ktery jiz resim cely vecer. Pro znale bude reseni >> jiste otazkou chvilky. Pokousim se o nasledujici: >> >> >> def foo(q): >>print os.getuid() >>while True: >>pass >> >> def bar(): >>os.setuid(NEJAKE_EXISTUJICI_UID) >>if not CESTA_K_HOME in sys.path: >>sys.path.append(CESTA_K_HOME) >>os.chdir(CESTA_K_HOME) >>cmd = "prikaz spouztejici web server" >>p = Popen(cmd, shell=True, stdout=PIPE) >>p.communicate() >> >> >> if __name__ == "__main__": >># fronta neni prozatim dulezita >>workQueue = Queue() >> >>bar_proc = Process(target=bar, args=()) >>foo_proc = Process(target=foo, args=(workQueue,)) >> >>foo_proc.start() >>bar_proc.start() >> >>foo_proc.join() >>bar_proc.join() >> >> >> Problem je ten ze webovy server z foo() nebezi i kdyz python rika >> (foo_proc.is_alive()), ze proces bezi. >> >> Kde delam neustale chybu? >> >> Diky za odpovedi. >> >> -- >> Tom >> >> ___ >> Python mailing list >> Python@py.cz >> http://www.py.cz/mailman/listinfo/python > > ___ > Python mailing list > Python@py.cz > http://www.py.cz/mailman/listinfo/python -- Tom ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] multiprocess a subprocess
Moje chyba melo byt bar(), foo() je jak rikate zatizi proc na 100% (tedy funguje). Oprava: Problem je ten ze webovy server z bar() nebezi ... azurIt wrote: > Co presne by mala robit funkcia foo() ? :) podla mna ti na 100% vyhuli > procesor a to je cele ;) > > > >> -Pôvodná správa----- >> Od: Tomas Pelka [mailto:tompe...@gmail.com] >> Komu: python@py.cz >> Predmet: [python] multiprocess a subprocess >> >> >> Zdravim, >> >> mam maly problem, ktery jiz resim cely vecer. Pro znale bude reseni >> jiste otazkou chvilky. Pokousim se o nasledujici: >> >> >> def foo(q): >> print os.getuid() >> while True: >> pass >> >> def bar(): >> os.setuid(NEJAKE_EXISTUJICI_UID) >> if not CESTA_K_HOME in sys.path: >> sys.path.append(CESTA_K_HOME) >> os.chdir(CESTA_K_HOME) >> cmd = "prikaz spouztejici web server" >> p = Popen(cmd, shell=True, stdout=PIPE) >> p.communicate() >> >> >> if __name__ == "__main__": >> # fronta neni prozatim dulezita >> workQueue = Queue() >> >> bar_proc = Process(target=bar, args=()) >> foo_proc = Process(target=foo, args=(workQueue,)) >> >> foo_proc.start() >> bar_proc.start() >> >> foo_proc.join() >> bar_proc.join() >> >> >> Problem je ten ze webovy server z foo() nebezi i kdyz python rika >> (foo_proc.is_alive()), ze proces bezi. >> >> Kde delam neustale chybu? >> >> Diky za odpovedi. >> >> -- >> Tom >> >> ___ >> Python mailing list >> Python@py.cz >> http://www.py.cz/mailman/listinfo/python > ___ > Python mailing list > Python@py.cz > http://www.py.cz/mailman/listinfo/python -- Tom Key fingerprint = 06C0 23C6 9EB7 0761 9807 65F4 7F6F 7EAB 496B 28AA ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
[python] multiprocess a subprocess
Zdravim, mam maly problem, ktery jiz resim cely vecer. Pro znale bude reseni jiste otazkou chvilky. Pokousim se o nasledujici: def foo(q): print os.getuid() while True: pass def bar(): os.setuid(NEJAKE_EXISTUJICI_UID) if not CESTA_K_HOME in sys.path: sys.path.append(CESTA_K_HOME) os.chdir(CESTA_K_HOME) cmd = "prikaz spouztejici web server" p = Popen(cmd, shell=True, stdout=PIPE) p.communicate() if __name__ == "__main__": # fronta neni prozatim dulezita workQueue = Queue() bar_proc = Process(target=bar, args=()) foo_proc = Process(target=foo, args=(workQueue,)) foo_proc.start() bar_proc.start() foo_proc.join() bar_proc.join() Problem je ten ze webovy server z foo() nebezi i kdyz python rika (foo_proc.is_alive()), ze proces bezi. Kde delam neustale chybu? Diky za odpovedi. -- Tom ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] spousteni casti kodu jako root
Tomas Pelka wrote: > Presne tak hlavy pomazane :D, bylo zmineno scapy a ten potrebuje > pristupovat k siti promiskuitne :D > > Me se nejlepe jevi moznost spoustet wrapper pres sudo a nasledne > informace (pakety) predavat do fronty odkud je muzu z nerootovskeho > porocesu odebirat (tim jestli bude mozne frontu cist i nerootovske > procesu si nejsem moc jisty) -- toto by se mi i z hlediska pozdejsiho > zpracovani vice vyhovovalo. Zatim jsem premyslel o Queues z multiprocessing, jeste nemam dokumentaci doctenu ale je mozne frontu sdilet mezi vice plne oddelenych procesu a navic po ruznymi uzivateli? > > Druha moznost, ktera me napada je ponekud "nepekna". Pouzit sudo a > tcpdump jehoz vystup ulozim do soubotu, tento pak uz jako bezny uzivatel > pomoci scapy nactu a zpracovavam. Ale toto reseni je jak jiste sami > uznate dost pomale a je to jako skrabat se levou nohou na pravem uchu. > > Tomas Pelka wrote: >> Zdravim vsechny, >> >> potreboval bych spoustet casti kodu jako root. Nevite nekdo jak na to? >> >> Proc to chci delat? Potreboval bych spoustet scapy pro odchytavani >> paketu, ale jak z namo k tomu potrebuji superuzivatelska opravneni. >> >> Dalsi moznost jak toto provest je udelat si jednoduchy wrapper a ten pak >> spoustet pres sudo. Jina metoda me nenapada. >> >> Diky za rady. >> > -- Tom Key fingerprint = 06C0 23C6 9EB7 0761 9807 65F4 7F6F 7EAB 496B 28AA ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] spousteni casti kodu jako root
Presne tak hlavy pomazane :D, bylo zmineno scapy a ten potrebuje pristupovat k siti promiskuitne :D Me se nejlepe jevi moznost spoustet wrapper pres sudo a nasledne informace (pakety) predavat do fronty odkud je muzu z nerootovskeho porocesu odebirat (tim jestli bude mozne frontu cist i nerootovske procesu si nejsem moc jisty) -- toto by se mi i z hlediska pozdejsiho zpracovani vice vyhovovalo. Druha moznost, ktera me napada je ponekud "nepekna". Pouzit sudo a tcpdump jehoz vystup ulozim do soubotu, tento pak uz jako bezny uzivatel pomoci scapy nactu a zpracovavam. Ale toto reseni je jak jiste sami uznate dost pomale a je to jako skrabat se levou nohou na pravem uchu. Tomas Pelka wrote: > Zdravim vsechny, > > potreboval bych spoustet casti kodu jako root. Nevite nekdo jak na to? > > Proc to chci delat? Potreboval bych spoustet scapy pro odchytavani > paketu, ale jak z namo k tomu potrebuji superuzivatelska opravneni. > > Dalsi moznost jak toto provest je udelat si jednoduchy wrapper a ten pak > spoustet pres sudo. Jina metoda me nenapada. > > Diky za rady. > -- Tom Key fingerprint = 06C0 23C6 9EB7 0761 9807 65F4 7F6F 7EAB 496B 28AA ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] spousteni casti kodu jako root
-BEGIN PGP SIGNED MESSAGE- Hash: SHA1 Adam Strauch wrote: > Ahoj, > > spustit jako root, forknout, v jednom zahodit práva a druhým čekat na > signál od prvního :) No jo ale puvodni proces nebezi pod rootem. > > Tomas Pelka píše v Čt 04. 02. 2010 v 19:36 +0100: > Zdravim vsechny, > > potreboval bych spoustet casti kodu jako root. Nevite nekdo jak na to? > > Proc to chci delat? Potreboval bych spoustet scapy pro odchytavani > paketu, ale jak z namo k tomu potrebuji superuzivatelska opravneni. > > Dalsi moznost jak toto provest je udelat si jednoduchy wrapper a ten pak > spoustet pres sudo. Jina metoda me nenapada. > > Diky za rady. > ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python > > ___ > Python mailing list > Python@py.cz > http://www.py.cz/mailman/listinfo/python - -- Tom Key fingerprint = 06C0 23C6 9EB7 0761 9807 65F4 7F6F 7EAB 496B 28AA -BEGIN PGP SIGNATURE- Version: GnuPG v1.4.10 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iEYEARECAAYFAktrJU0ACgkQf29+q0lrKKolmQCfbYTT6P4hgVucWYfvQ34e/+HZ StgAnRvdmljzq7ihg/n1fD+c8U7ByTYz =ZbgV -END PGP SIGNATURE- ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
[python] spousteni casti kodu jako root
-BEGIN PGP SIGNED MESSAGE- Hash: SHA1 Zdravim vsechny, potreboval bych spoustet casti kodu jako root. Nevite nekdo jak na to? Proc to chci delat? Potreboval bych spoustet scapy pro odchytavani paketu, ale jak z namo k tomu potrebuji superuzivatelska opravneni. Dalsi moznost jak toto provest je udelat si jednoduchy wrapper a ten pak spoustet pres sudo. Jina metoda me nenapada. Diky za rady. - -- Tom Key fingerprint = 06C0 23C6 9EB7 0761 9807 65F4 7F6F 7EAB 496B 28AA -BEGIN PGP SIGNATURE- Version: GnuPG v1.4.10 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iEYEARECAAYFAktrE78ACgkQf29+q0lrKKpqLQCbBFRVKU+ko9ncMsyb77jCksLv xsoAnA64gN022GvlSHCY7IsX1RE+OjQr =CVTC -END PGP SIGNATURE- ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] python subprocess vraci porad 1
On 01/21/2010 11:52 AM, Jan Jakubuv wrote: zdravim, On Thu, Jan 21, 2010 at 09:44:55AM +0100, Tomas Pelka wrote: Dobry napad, predelal sem tedy na: -- cmd = "/usr/bin/locate" arg1 = " -i" arg2 = " -d /var/www/books/mlocate.db" arg3 = str(" " + pattern) Chyba je formatu argumentu arg1, atd. Ta mezera na zacatku tam nesmi byt. Zkuste: arg1 = "-i" arg2a = "-d" arg2a = "/var/www/books/mlocate.db" arg3 = str(pattern) p1 = subprocess.Popen([cmd, arg1, arg2a, arg2b, arg3], shell=False, ...) Zbytek uz je spravne, pokud argumenty predavate jako list pak je skutecne treba zadat je oddelene. Pokud chcete zadat prikaz jako jeden string pak pouzijte `shell=True` a namistu listu zadejte string: p1 = subprocess.Popen("/usr/bin/locate -i -d file pattern", shell=True, ...) (stdoutdata, stderrdata) = p1.communicate() print p1.returncode print "%s -- %s" % (stdoutdata, stderrdata) -- Ale stale vraci 1 a zadny vysledek. honza. Diky za radu ale stale se nedokazu dobrat nejakemu vysledku. Skript je vlastne CGI spoustene z apache, divne ale je, ze kdyz spustim z shellu: # su -s /bin/bash -c "/usr/bin/locate -i -d /var/www/books/mlocate.db python; echo $?" apache 0 --- tak vzdy dostanu 0 ale zadny vysledek, pritom CGI vraci 1. Kdyz to same spustim jako bezny uzivatel (ne apache) tak dostanu 0 a nenulovy tedy spravny vysledek. Problem s mlocate.db by byt nemel, protoze je citelny pro apache (ten je ve skupine books) a vlastne i pro ostatni, viz: # su -s /bin/bash -c "ls -l /var/www/books/mlocate.db" apache -rw-rw-r-- 1 tom books 1465653 Jan 20 13:33 /var/www/books/mlocate.db Cely CGI v priloze. -- Tom #!/usr/bin/python import cgi import cgitb; cgitb.enable() # for troubleshooting import subprocess import sys import os sys.stderr = sys.stdout command = "" result = "" stdoutdata = "" stderrdata = "" # Create instance of FieldStorage form = cgi.FieldStorage() # Get data from field 'pattern' pattern = form.getvalue('pattern', 'None') # Get data from field 're' re = form.getvalue('re') cmd = "/usr/bin/locate" arg1 = "-i" arg2a = "-d" arg2b = "/var/www/books/mlocate.db" arg3 = "-r" arg4 = str(pattern) p1 = None if re == "re": p1 = subprocess.Popen([cmd, arg1, arg2a, arg2b, arg3, arg4], shell=False, \ stdout=subprocess.PIPE, stderr=subprocess.PIPE) command = "%s %s %s %s %s %s" % (cmd, arg1, arg2a, arg2b, arg3, arg4) else: p1 = subprocess.Popen([cmd, arg1, arg2a, arg2b, arg4], shell=False, \ stdout=subprocess.PIPE, stderr=subprocess.PIPE) command = "%s %s %s %s %s " % (cmd, arg1, arg2a, arg2b, arg4) (stdoutdata, stderrdata) = p1.communicate() print "Content-type: text/html" print # debug print "UID: %i " % os.getuid() print "Search pattern: %s " % pattern print """stdout: %s stderr: %s """ % (stdoutdata, stderrdata) print "Return code: %i" % p1.returncode print """ Hledej v books Hledany vyraz: Hledat pomoci regularniho vyrazu? """ if p1.returncode == 0: if stdoutdata: result = stdoutdata else: result = "Nic takoveho sem nenasel :/" else: result = 'Chyba: \ index souboru je bud zastaraly nebo doslo \ k chybe pri vyhledavani.%s \ %s' % (command, stderrdata) print """ Hledany vyraz "%s" se nachazi v nasledujicich adresarich %s """ % (pattern, result) ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] python subprocess vraci porad 1
Dobry napad, predelal sem tedy na: -- cmd = "/usr/bin/locate" arg1 = " -i" arg2 = " -d /var/www/books/mlocate.db" arg3 = str(" " + pattern) p1 = subprocess.Popen([cmd, arg1, arg2, arg3], shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE) (stdoutdata, stderrdata) = p1.communicate() print p1.returncode print "%s -- %s" % (stdoutdata, stderrdata) -- Ale stale vraci 1 a zadny vysledek. On 01/20/2010 09:44 PM, Koumes21 wrote: Nazdar, me napada akorat to, ze prvni parametr pro subprocess.Popen() by nemel vypadat jako [cmd, args], ale jako [cmd, arg1, arg2, ...], tedy ze jednotlive argumenty by nemely byt jen oddeleny mezerou, ale mely by byt samostatnymi prvky listu. Doufam, ze je to jasne a ze to pomuze (nezkousel jsem, jenom jsem si tohohle zrovna vsiml). K21 2010/1/20 Tomas Pelka: Zdravim konferenci, temer cely den se peru se subprocess. Problem me dela naledujici jednoducha konstrukce: -- import subprocess pattern = "python" cmd = "/usr/bin/locate" args = " -i -d /var/www/books/mlocate.db %s" % pattern p1 = subprocess.Popen([cmd, args], shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE) (stdoutdata, stderrdata) = p1.communicate() print p1.returncode print "%s -- %s" % (stdoutdata, stderrdata) -- Takze cilem je spustit prikaz /usr/bin/locate -i -d /var/www/books/mlocate.db python v shellu tento prikaz vypise nenulovy vysledek a skonci s nulovym navratovym kodem. V pythonu konci s navratovym kodem "1" a " -- ". Netusim proc tomu tak je, ma nekdo nejaky napad. Dekuji. -- Tom Key fingerprint = 06C0 23C6 9EB7 0761 9807 65F4 7F6F 7EAB 496B 28AA ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python -- Tom ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
[python] python subprocess vraci porad 1
Zdravim konferenci, temer cely den se peru se subprocess. Problem me dela naledujici jednoducha konstrukce: -- import subprocess pattern = "python" cmd = "/usr/bin/locate" args = " -i -d /var/www/books/mlocate.db %s" % pattern p1 = subprocess.Popen([cmd, args], shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE) (stdoutdata, stderrdata) = p1.communicate() print p1.returncode print "%s -- %s" % (stdoutdata, stderrdata) -- Takze cilem je spustit prikaz /usr/bin/locate -i -d /var/www/books/mlocate.db python v shellu tento prikaz vypise nenulovy vysledek a skonci s nulovym navratovym kodem. V pythonu konci s navratovym kodem "1" a " -- ". Netusim proc tomu tak je, ma nekdo nejaky napad. Dekuji. -- Tom Key fingerprint = 06C0 23C6 9EB7 0761 9807 65F4 7F6F 7EAB 496B 28AA ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] python + XMLRPC/SOAP/REST
azurIt napsal(a): > Ahoj, > > my pre nase API pouzivame SOAP, konkretne ZSI ( > http://pywebsvcs.sourceforge.net/ ). Musim s tebou ale suhlasit, ze > implementacia ako taka je dost zvlastna, navyse verzie 2.0 a 2.1 boli pre nas > nepouzitelne takze sme zostali pri 1.7 + nejake custom upravy. Ale problemy > mame mozno tym, ze si to vsetko trochu ulahcujem a vsade pouzivam typ Any :) > v kazdom pripade, nevidim dovod pouzivat komplexne typy, kedze vzdy prenasam > len standardne boolean/integer/string/array. > > azur > Mohl bych se jeste pozastavit nad ZSI, jake konkretne problemy s nim mate, treba mi to pomuze v rozhodovani. > >> -Pôvodná správa- >> Od: Tomas Pelka [mailto:tompe...@gmail.com] >> Komu: Konference PyCZ >> Predmet: [python] python + XMLRPC/SOAP/REST >> >> >> Zdravim konferenci, chtel bych se vas vsech zeptat na nazor na >> nasledujici problematiku. >> >> Vyvstal prede mnou problem tvorby webove sluzby, respektive potrebuji >> zajistit RPC. Proto predpokladam tvorbu serverove a klientske casti >> otazkou ale zustava jakou technologii zvolit. >> >> Zatim se jako nejlepe v pythonu implementovana jevi klasicka XML-RPC, >> tato technologie ma vsak sva omezeni, ze kterych mam obavy. >> >> Jako dalsi prichazeji v uvahu SOAP a REST, ktere mne svymi >> implementacemi nenadchli. Muzete se s emnou podelit o vase zkusenoasti >> s REST a SOAP v pythonu? Tyto technologie by se jako nove a komplexni >> hodily daleko vice. >> >> O co se vlstne bude jednat ve vysledku, tato sluzba by mela ovladat >> linuxovou distribuci ve smyslu spousteni nejakych skriptu a navraceni >> hodnot/vysledku operaci. >> >> Dekuji za nazory. >> -- >> >> Tom >> ___ >> Python mailing list >> Python@py.cz >> http://www.py.cz/mailman/listinfo/python > ___ > Python mailing list > Python@py.cz > http://www.py.cz/mailman/listinfo/python -- Tom ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] python + XMLRPC/SOAP/REST
On 16 led, 11:48, "azurIt" wrote: > Ahoj, > > my pre nase API pouzivame SOAP, konkretne ZSI > (http://pywebsvcs.sourceforge.net/). Musim s tebou ale suhlasit, ze > implementacia ako taka je dost zvlastna, navyse verzie 2.0 a 2.1 boli pre nas > nepouzitelne takze sme zostali pri 1.7 + nejake custom upravy. Ale problemy > mame mozno tym, ze si to vsetko trochu ulahcujem a vsade pouzivam typ Any :) > v kazdom pripade, nevidim dovod pouzivat komplexne typy, kedze vzdy prenasam > len standardne boolean/integer/string/array. > > azur > No ja prave jeste presne nevim jestli si vystacim s boolean/integer/ string/array, pak by me zrejme postacil xml-rpc, k cemu bych se klonil radeji. Vzhledem k ucelu by to ale mohlo stacit. ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
[python] python + XMLRPC/SOAP/REST
Zdravim konferenci, chtel bych se vas vsech zeptat na nazor na nasledujici problematiku. Vyvstal prede mnou problem tvorby webove sluzby, respektive potrebuji zajistit RPC. Proto predpokladam tvorbu serverove a klientske casti otazkou ale zustava jakou technologii zvolit. Zatim se jako nejlepe v pythonu implementovana jevi klasicka XML-RPC, tato technologie ma vsak sva omezeni, ze kterych mam obavy. Jako dalsi prichazeji v uvahu SOAP a REST, ktere mne svymi implementacemi nenadchli. Muzete se s emnou podelit o vase zkusenoasti s REST a SOAP v pythonu? Tyto technologie by se jako nove a komplexni hodily daleko vice. O co se vlstne bude jednat ve vysledku, tato sluzba by mela ovladat linuxovou distribuci ve smyslu spousteni nejakych skriptu a navraceni hodnot/vysledku operaci. Dekuji za nazory. ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
[python] python + XMLRPC/SOAP/REST
Zdravim konferenci, chtel bych se vas vsech zeptat na nazor na nasledujici problematiku. Vyvstal prede mnou problem tvorby webove sluzby, respektive potrebuji zajistit RPC. Proto predpokladam tvorbu serverove a klientske casti otazkou ale zustava jakou technologii zvolit. Zatim se jako nejlepe v pythonu implementovana jevi klasicka XML-RPC, tato technologie ma vsak sva omezeni, ze kterych mam obavy. Jako dalsi prichazeji v uvahu SOAP a REST, ktere mne svymi implementacemi nenadchli. Muzete se s emnou podelit o vase zkusenoasti s REST a SOAP v pythonu? Tyto technologie by se jako nove a komplexni hodily daleko vice. O co se vlstne bude jednat ve vysledku, tato sluzba by mela ovladat linuxovou distribuci ve smyslu spousteni nejakych skriptu a navraceni hodnot/vysledku operaci. Dekuji za nazory. -- Tom ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] pause python thread
Jirka Vejrazka napsal(a): > 1) Nebylo by v danem pripade pouzitelne threading.Timer()? Ptam se, > protoze neznam konkretni kontext No nevim jestli Timer je to prave orechove. Ja proste potrbuji aby bezelo vlakno a jednou za 10 min neco udelalo. Nejprve jsem si rikal ze to pujde nastartovat, stopnout, cekat a pak zase nastartovat, ale asi to neni moc koser vzhledem k reziji startovani/zastavovani. Timer podel toho jak jsem se na nej zbezne dival, umi pouze zpozdit start, ale treba se platu a tak me opravte. > > 2) time.sleep na mem pocitaci procesor nezatezuje, zkusil jsem tohle > (pozor, nema to osetrene ukonceni a je potreba to "zabit") > > import threading > from time import sleep > > def loop(letter): > while True: > print letter, > sleep(2) > > t1 = threading.Thread(target=loop, args='1') > t2 = threading.Thread(target=loop, args='2') > > t1.start() > sleep(1) > t2.start() > > > Jirka > ___ > Python mailing list > Python@py.cz > http://www.py.cz/mailman/listinfo/python -- Tom ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] Init script a xmlrpc
Pekny priklad je treba tady http://code.activestate.com/recipes/278731/ Věroš Kaplan wrote: > Mrknuli se, jaký je správný postup pro psaní démona na UNIXu. > (třeba tohle se mi líbí http://www.enderunix.org/docs/eng/daemon.php ) > > Co se pamatuju, tak stačilo fork()nout potomka a rodič mohl exit()nout. > Potomek potom někam poznamenal svoje PID, aby bylo možné ho posláním > signálu INTR zabít a nemuselo se složitě hledat jeho PID. > Je vhodné ještě přesměrovat stdin, stdout a stderr na vhodné místo (do > logu nebo /dev/null) aby výstup z potomka nizavl > > Initscript s parametrem "start" potom pouze zavolá vlastní skript (s > parametrem "teď se chovej jako démon") a ten už si vše zařídí ve své > režii. Pokud dostane initskript parametr "stop", zavolá Jejich skript > s parametrem "teď zkus najít PID svého bratra a zabij ho" . > > --VK > PS: Bez záruky, ale v dobré víře :-) > > 2008/8/5 Miloš Kozák <[EMAIL PROTECTED]>: >> Zdravím, >> mám napsaný takový základní jednoduchý xmlrpc server, který dělá vše co má. >> Chtěl bych však tento kód upravit tak, aby jej bylo možné spouštět, jako >> init script v linuxu, primárně mi jde o distribuci debian. >> > ___ > Python mailing list > Python@py.cz > http://www.py.cz/mailman/listinfo/python -- Tom ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] pause python thread
Jiste s tim souhlasim, nabizi vice moznosti, ale jak jsem psal uplne me postacilo spoustet vlakna ala: def someFunc(): while 1: blah blah thread.start_new_thread(someFunc,()) Vypada to ale tak ze to jednou stejne prepisi do threading. Jirka Vejrazka wrote: > Ja uz jenom doplnim - ve vetsine pripadu je pouziti modulu threading > lepsi nez pouziti thread, zatim jsem se nesetkal s pripadem kdy by to > bylo obracene. Ale mozna ze tohle je jeden z nich. > > Jirka > ___ > Python mailing list > Python@py.cz > http://www.py.cz/mailman/listinfo/python -- Tom ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] pause python thread
Hmm tak to bude neco shnileho v mem programu, kdyz to nedela sleep. No jeste trochu popisi co potrebuji udelat. Jedna se o operaci, je ted jendo jakou, ktera se opakuje kazdych 10 min. No ja tedy tuto operaci provedu a pak v zavislosti na na tom jak dlouho trva dopocitam zbytek do 10min. Tohle bezi ve smycce, v jednom vlaknu. Myslim tedy ze se jedna o prvni priklad, jak pisete a tudiz se asi sleepu nevyhnu (pokud nekoho napada jak by se to dalo zariti jinak sem s tim ;)) Na druhy pripad to nemam podle meho nazoru jak napasovat, nemam se podle ceho synchronizovat. Je ale mozne se uvazuji spatne. superman wrote: > Ještě bych chtěl upřesnit, že uspání pomocí sleep nezatíží procesor > vůbec. Po dobu uspání thread nedostává procesorový čas, a tudíž nikterak > procesor nezatěžuje. Pokud je skutečně Vaším cílem počkat 10 minut, pak > sleep je to nejlepší možné řešení, které můžete použít. Pokud je Vaším > cílem počkat na nějakou operaci, která nastane asi za 10 minut, tak je > sleep diletantismus, protože je lépe synchronizovat čekání na další > operaci nějakým vhodnějším synchronizačním objektem (třeba mutexem, nebo > semaforem). > > Miloslav Ponkrác > > > ___ > Python mailing list > Python@py.cz > http://www.py.cz/mailman/listinfo/python -- Tom ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
[python] pause python thread
Zdravim diskuzi, nejakou dobu laboruji s thready v pythonu. V socasne dobe se snazim prijit na to jak pozastavit vlakno vytvorene pomoci thread. Vim ze pokud bych vlakna tvoril pomoci threading tak tato moznost existuje ale v dobe kdy jsem zacal psat aplikaci tak mi thread prisel jednodussi a proto jsem jej zvolil namisto threading. Jeste bych mel asi objasnit nac pozastaveni vlakna potrebuji. Mam vlakno ktere vykona nejakou operaci a pak ceka napr. 10min. Resit takovouto situaci pomoci sleep() je hloupust, procesor totiz zustane zatizen na 100= %. Deuji za rady. --=20 Tom * Tomas Pelka[EMAIL PROTECTED] * * Key fingerprint: * 06C0 23C6 9EB7 0761 9807 65F4 7F6F 7EAB 496B 28AA * www.gpg.cz signature.asc Description: OpenPGP digital signature ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
[python] sqlite3 a dotazy z promenne
Zdravim konferenci, narazil sem na problem vkladani databazovych dotazu z promenne, resp. parametru. Popisi situaci, mam tridu dejme tomu data: import sqlite3 class Data: def __init__(self,query): self.query = query self.conn = sqlite3.connect('db.db') self.c = self.conn.cursor() self.c.execute('%s' % self.query); def getRow(self): return self.c.fetchone() * Chtel bych ji jako parametr zadavat cely databazovy dotaz (Pokud je to spatne cesta poradte jak na to prosim.). Pouziji-li teoreticky nebezpecnou metodu s retezcem (%s) dostavam tohle: >>> import data >>> d = data.Data("SELECT * FROM main_t;") Traceback (most recent call last): File "", line 1, in File "data.py", line 10, in __init__ self.c.execute('%s' % self.query); sqlite3.OperationalError: near "SELECT": syntax error Pouziji-li dle dokumentace bezpecnou metodu (self.c.execute('?', (self.query));) dostavam tohle: >>> import data >>> d = data.Data("SELECT * FROM main_t;") Traceback (most recent call last): File "", line 1, in File "data.py", line 10, in __init__ self.c.execute('?', (self.query)); sqlite3.OperationalError: near "?": syntax error Dekuji za rady, hezky den vsem. -- S pozdravem Tomáš Pelka e-mail: [EMAIL PROTECTED] ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python