Maison > développement back-end > Tutoriel Python > Comment puis-je diriger une chaîne vers le stdin de subprocess.Popen ?

Comment puis-je diriger une chaîne vers le stdin de subprocess.Popen ?

Susan Sarandon
Libérer: 2024-12-08 18:31:10
original
507 Les gens l'ont consulté

How Can I Pipe a String to subprocess.Popen's stdin?

Comment canaliser une chaîne dans subprocess.Popen via l'argument Stdin

La fonction subprocess.Popen permet aux scripts Python de générer de nouveaux processus et interagir avec leurs entrées, sorties et erreurs standard. Un cas d'utilisation courant consiste à transmettre des données au processus enfant via son stdin, ce qui peut être réalisé en spécifiant stdin=PIPE lors de la création de l'objet.

Cependant, tenter d'utiliser un objet cStringIO.StringIO comme flux stdin entraîne une erreur, car il lui manque l'attribut fileno attendu par subprocess.Popen. Pour résoudre ce problème, utilisez les techniques suivantes :

Utilisation de Popen.communicate()

Selon la documentation officielle, Popen.communicate() s'attend à ce que les données soient transmises via le paramètre d'entrée, plutôt que le flux stdin. Modifiez votre code pour :

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())
Copier après la connexion

À l'aide de subprocess.run (Python 3.5)

Pour les versions Python 3.5 et supérieures, subprocess.run fournit un moyen simplifié de gérer sous-processus. Il vous permet de transmettre une entrée de chaîne et d'obtenir une sortie de chaîne en un seul appel de fonction :

#!/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)
print(p.stdout)
Copier après la connexion

En adoptant ces approches, vous pouvez efficacement transmettre une chaîne dans subprocess.Popen via l'argument stdin, permettant à vos programmes de interagir de manière transparente avec les processus externes.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal