Passer des chaînes à subprocess.Popen via stdin
Afin de passer une chaîne à subprocess.Popen, il est essentiel de spécifier stdin= PIPE dans l’appel de fonction. Cela permet à l'attribut stdin de l'objet Popen d'être un objet de type fichier pouvant recevoir des données d'une chaîne.
Pour démontrer cela, l'exemple suivant pourrait être implémenté :
from subprocess import Popen, PIPE, STDOUT p = Popen(['grep', 'f'], stdout=PIPE, stdin=PIPE, stderr=STDOUT) grep_stdout = p.communicate(input=b'one\ntwo\nthree\nfour\nfive\nsix\n')[0] print(grep_stdout.decode()) # -> four # -> five # ->
En fournissant stdin=PIPE, la chaîne d'entrée peut être transmise au processus grep via stdin.communicate(), permettant le traitement des données d'entrée et la récupération des données de la commande. sortie.
Python 3.5 et les versions ultérieures fournissent la fonction subprocess.run, qui simplifie le processus de transmission de chaînes aux commandes externes et de récupération de leurs sorties. Cela peut être illustré comme suit :
#!/usr/bin/env python3 from subprocess import run, PIPE p = run(['grep', 'f'], stdout=PIPE, input='one\ntwo\nthree\nfour\nfive\nsix\n', encoding='ascii') print(p.returncode) # -> 0 print(p.stdout) # -> four # -> five # ->
En utilisant subprocess.run, la chaîne d'entrée peut être directement transmise comme argument au paramètre d'entrée, ce qui rend la communication des données plus simple.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!