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 alfolyamatalfolyamat.run (["macska", "adatok.txt "])
A fenti kód futtatásával a következő kimenet jelenik meg:
név = JánosCompletedProcess (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 alfolyamatalfolyamat.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 alfolyamatoutput = 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 alfolyamatalfolyamat.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 alfolyamatoutput = 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 alfolyamatalfolyamat.run ("macska" adatok.txt '", shell = True)
A fenti kód futtatása a következő kimenetet eredményezi:
név = JánosKö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.