commandwrapper er en Python-modul til wrap en shell-kommando i en Python med gevind objekt.
Anvendelse:
Du ønsker at starte følgende bash kommandoer i en tråd:
[Bruger @ localhost ~] $ ls -l | grep pdf | wc -l
5
her er, hvordan du kan gøre det:
>>> Ls = WrapCommand ('ls -l)
>>> GrepPdf = WrapCommand ('grep pdf)
>>> Wc = WrapCommand ("wc -l)
>>> Wc.stdin = GrepPdf
>>> GrepPdf.stdin = Ls
>>> Wc.start ()
>>> #Do Ting
...
>>> Wc.join ()
>>> Wc.results
(5 n ',' ')
de »resultater« ejendom er en tupel (stdoutdata, stderrdata)
Du kan også gøre det på denne måde:
>>> Ls = WrapCommand ('ls -l | grep pdf | wc -l «, shell = True)
>>> Ls.start ()
>>> #Do Ting
>>> Ls.join ()
>>> Ls.results [0]
»5 n '
Du vil skulle specificere 'shell = True', når den kommando, du ønsker at udføre er faktisk bygget ind i skallen. dvs: på Windows, hvis du bruger indbyggede kommandoer som "dir" eller "kopi": http://docs.python.org/library/subprocess.html#subprocess.Popen
Formålet med at gøre det i en tråd, er, når de ovennævnte kommandoer kan tage et par timer, og at du ønsker at udføre andre opgaver i mellemtiden. Du kan kontrollere processen kører stadig med:
>>> Wc.is_alive ()
False
'True' ville blive returneret, hvis der stadig kører. For at afslutte det for tidligt (dvs. det fastlåste) du har den 'afslutte ()', 'Kill () "eller" send_signal (signal) metoder, der selv taler. Når du ønsker at vente på tråden til ende, bruge 'slutte () metoden: http://docs.python.org/library/threading.html#threading.Thread.join
Du ønsker at starte følgende bash kommandoer uden gevind:
[Bruger @ localhost ~] $ ls -l | grep pdf | wc -l
5
her er, hvordan du kan gøre det:
>>> Ls = WrapCommand ('ls -l)
>>> GrepPdf = WrapCommand ('grep pdf)
>>> Wc = WrapCommand ("wc -l)
>>> Wc (GrepPdf (LS))
»5 n '
Undgå at gøre dette for processer, hvor en stor mængde data pipes mellem hver kommando.
i stedet, gør det på denne måde:
>>> Ls = WrapCommand ('ls -l | grep pdf | wc -l «, shell = True)
>>> Ls ()
»5 n '
Foretrækker gevind metode i stedet, hvis det kan tage lang tid, og at du ønsker at udføre andre opgaver i mellemtiden.
Du kan angive en anden skal til at køre kommandoer:
>>> Ls = WrapCommand ('ls', shell = True, eksekverbare = 'C: /windows/System32/WindowsPowerShell/v1.0/powershell.exe')
>>> print Ls ()
& Nbsp; mappe: C: Brugere Yves python_tests
Tilstand LastWriteTime Længde Navn
---- ------------- ------ ----
-a --- 27-01-2011 00:14 7006 commandwrapper.py
-a --- 27-01-2011 00:15 7048 commandwrapper.pyc
Du kan også bruge Context Management (with_item): http://docs.python.org/reference/compound_stmts.html#grammar-token-with_item
Eksempel:
>>> Med WrapCommand ('ls -l «) som Ls:
... Med WrapCommand ('grep pdf «) som GrepPdf:
... Med WrapCommand ("wc -l«) som WC
... Wc.stdin = GrepPdf
... GrepPdf.stdin = Ls
... Wc.start ()
... #Do Stuff
... Wc.join ()
...
>>> Wc.results
(5 n ',' ')
Du kan også blot ønsker at have en underproces Objet:
>>> ls = WrapCommand ('ls -l)
>>> Lscmd = ls.makeCmd ()
>>>
den returnerede objekt (lscmd i ovenstående eksempel) er en standard subprocess.Popen objekt
WrapOnceCommand er det samme som WrapCommand, men cmd attribut, som er en subprocess.Popen objekt vil blive oprettet en gang for alle Derfor Kør methode (eller genstand) kan kun kaldes én gang. Målet er det at starte en kommando i en tråd, og at få denne kommando nemt starte / stoppes fra andre steder
Hvad er nyt i denne udgivelse:.
- Ændret forfatterens kontakt info.
Hvad er nyt i version 0.4:
- Advarsel her: http: //docs.python. org / reference / datamodel.html # objekt .__ del __
- Og becasue ødelagte genstande, hvor der ikke automaticaly fjernes af affaldsindsamling, som beskrevet her:. Http://docs.python.org/library/gc.html#gc.garbage som kan forårsage hukommelsesforbrug stigning
Krav :
- Python
Kommentarer ikke fundet