Piton

Shell parancsok végrehajtása a Pythonban az alfolyamat futtatásának módszerével

Shell parancsok végrehajtása a Pythonban az alfolyamat futtatásának módszerével
Az alfolyamat egy beépített Python modul, amely felhasználható új folyamatok létrehozására, valamint a bemeneti és kimeneti adatfolyamokkal való interakcióra. Egyszerűbben kifejezve használhatja shell parancsok futtatására és futtatható bináris fájlok futtatására, amelyek általában különböző „bin” mappákba vannak szórva egy Linux fájlrendszerben. Megadhat egy teljes elérési utat is egy futtatható binárishoz, és használhatja a binárishoz társított bármely parancssori kapcsolót. Ez a cikk elmagyarázza, hogyan kell használni az alfolyamat modult és annak futtatási módszerét a Python-alkalmazásokban. A cikkben szereplő összes kódmintát Python 3-mal tesztelik.8.2 az Ubuntu 20-on.04.

Az alfolyamat.futtassa a Method-ot

Az alfolyamat.A run metódus argumentumlistát vesz fel. A metódus meghívásakor végrehajtja a parancsot, és megvárja a folyamat befejezését, és végül egy „CompletedProcess” objektumot ad vissza. A „CompletedProcess” objektum visszaadja az stdout, a stderr, a metódus meghívásakor használt eredeti argumentumokat és a visszatérési kódot. Az Stdout a parancs által létrehozott adatfolyamra utal, míg a stderr a program végrehajtása során felmerült hibákra utal. Bármely nem nulla visszatérési kód (exit code) hibát jelent az alfolyamatban végrehajtott paranccsal.futtatási módszer.

1. példa: Egy szövegfájl tartalma az alfolyamat használatával.futtassa a Method-ot

Az alábbi parancs kiadja az „adatok.txt ”fájl, feltéve, hogy tartalmaz egy„ name = John ”karakterláncot.

import alfolyamat
alfolyamat.run (["macska", "adatok.txt "])

A fenti kód futtatásával a következő kimenet jelenik meg:

név = János
CompletedProcess (args = ['macska', 'adatok.txt '], visszatérési kód = 0)

A lista argumentum első eleme a végrehajtandó parancs neve. A lista minden olyan eleme, amely az első elemet követi, parancssori opcióknak vagy kapcsolóknak számít. Az opciók meghatározásához egy- és kettõs kötõjelet is használhat. Például egy könyvtárban lévő fájlok és mappák felsorolásához a kód az „alfolyamat.futás [[„ls”, „-l”] ”. Ezen esetek többségében a shell parancs bármely szóközzel elválasztott argumentumát az alfolyamathoz adott lista egyedi elemének tekintheti.futtatási módszer.

2. példa: Az alfolyamat kimenetének elnyomása.futtassa a Method-ot

Az alfolyamat kimenetének elnyomása.futási módszerrel, meg kell adnia az „stdout = subprocess.DEVNULL ”és„ stderr = alfolyamat.DEVNULL ”mint további érvek.

import alfolyamat
alfolyamat.run (["macska", "adatok.txt "], stdout = alfolyamat.DEVNULL,
stderr = alfolyamat.DEVNULL)

A fenti kód futtatása a következő kimenetet eredményezi:

CompletedProcess (args = ['macska', 'adatok.txt '], visszatérési kód = 0)

3. példa: Az alfolyamat kimenetének rögzítése.futtassa a Method-ot

Az alfolyamat kimenetének rögzítése.futtatási metódust, használjon egy további argumentumot, amelynek neve „capture_output = True”.

import alfolyamat
output = alfolyamat.run (["macska", "adatok.txt "], capture_output = True)
nyomtatás (kimenet)

A fenti kód futtatása a következő kimenetet eredményezi:

CompletedProcess (args = ['macska', 'adatok.txt '], visszatérési kód = 0,
stdout = b'name = John \ n ', stderr = b ")

Az „stdout” és a „stderr” értékeket egyedileg érheti el a „output” használatával.stdout ”és„ output.stderr ”módszerek. A kimenetet bájtsorozatként állítják elő. Ha egy karakterláncot szeretne kimenetként kapni, használja a „output.stdout.dekódolás („utf-8”) ”módszer. Azt is megadhatja, hogy a "text = True" kiegészítő argumentumként szerepeljen az alfolyamatban.futtassa a kimenetet string formátumban. A kilépési állapotkód megszerzéséhez használhatja a „kimenetet.visszatérési kód ”módszer.

4. példa: Kivétel emelése az alfolyamat által végrehajtott parancs meghibásodása esetén.futtassa a Method-ot

Kivételt hozhat, amikor a parancs nem nulla állapottal lép ki, használja a „check = True” argumentumot.

import alfolyamat
alfolyamat.run (["macska", "adatok.tx "], capture_output = True, text = True, check = True)

A fenti kód futtatása a következő kimenetet eredményezi:

emelje fel a CalledProcessError (újrakódolás, folyamat.érvel,
alfolyamat.CalledProcessError: Parancs '[' macska ',' adatok.tx ']'
visszaadott nulla nélküli kilépési állapot 1.

5. példa: Karakterlánc átadása az alfolyamat által végrehajtott parancsnak.futtassa a Method-ot

Karakterláncot adhat át az alfolyamat által végrehajtandó parancsnak.futtatási módszer az „input = 'string' 'argumentum használatával.

import alfolyamat
output = alfolyamat.run (["cat"], input = "adatok.txt ", capture_output = Igaz,
szöveg = Igaz, ellenőrzés = Igaz)
nyomtatás (kimenet)

A fenti kód futtatása a következő kimenetet eredményezi:

CompletedProcess (args = ['cat'], visszatérési kód = 0, stdout = "adatok.txt ", stderr =")

Mint látható, a fenti kód továbbítja az „adatokat.txt ”karakterláncként, és nem fájlobjektumként. „Adatok átadására.txt ”fájlként használja a„ stdin ”argumentumot.

nyílt ("adatokkal.txt ") mint f:
output = alfolyamat.run (["cat"], stdin = f, capture_output = True,
szöveg = Igaz, ellenőrzés = Igaz)
nyomtatás (kimenet)

A fenti kód futtatása a következő kimenetet eredményezi:

CompletedProcess (args = ['cat'], visszatérési kód = 0, stdout = "név = John \ n", stderr = ")

6. példa: A parancs végrehajtása közvetlenül a Shellben az alfolyamat használatával.futtassa a Method-ot

Lehetséges egy parancs futtatása közvetlenül egy "shell" -be egy héjba ahelyett, hogy a főparancsban osztott karakterláncot és az azt követő opciókat használnánk. Ehhez további argumentumként meg kell adnia a „shell = True” szót. Ezt azonban a python fejlesztői nem kedvelik, mivel a „shell = True” használata biztonsági problémákhoz vezethet. A biztonsági vonatkozásokról itt olvashat bővebben.

import alfolyamat
alfolyamat.run ("macska" adatok.txt '", shell = True)

A fenti kód futtatása a következő kimenetet eredményezi:

név = János

Következtetés

Az alfolyamat.A run metódus a Pythonban elég hatékony, mivel lehetővé teszi a shell parancsok futtatását magában a pythonban. Ez segít korlátozni az összes kódot magára a pythonra anélkül, hogy külön fájlokban további shell parancsfájl-kódra lenne szükség. Ugyanakkor meglehetősen bonyolult a shell parancsok helyes kódolása a python listában. Használhatja a „shlex.split () ”módszer az egyszerű shell parancsok tokenizálására, de hosszú, összetett parancsokban - különösen azokban, amelyek csőszimbólumokkal rendelkeznek - a shlex nem képes helyesen felosztani a parancsot. Ilyen esetekben a hibakeresés trükkös kérdés lehet. Ennek elkerülésére használhatja a „shell = True” argumentumot, de bizonyos biztonsági aggályok társulnak ehhez a művelethez.

A WinMouse segítségével testre szabhatja és javíthatja az egérmutató mozgását a Windows PC-n
Ha szeretné javítani az egérmutató alapértelmezett funkcióit, használjon ingyenes programokat WinMouse. További funkciókat kínál, amelyek segítenek ab...
Az egér bal oldali gombja nem működik a Windows 10 rendszeren
Ha dedikált egeret használ laptopjával vagy asztali számítógépével, de a az egér bal gombja nem működik a Windows 10/8/7 rendszeren valamilyen oknál f...
A kurzor véletlenszerűen ugrik vagy mozog, miközben gépel a Windows 10-ben
Ha úgy találja, hogy az egér kurzor önállóan, automatikusan, véletlenszerűen ugrik vagy mozog, miközben gépel Windows laptopba vagy számítógépbe, akko...