Maison > développement back-end > Tutoriel Python > Comment transmettre correctement l'entrée de chaîne au stdin de « subprocess.Popen » ?

Comment transmettre correctement l'entrée de chaîne au stdin de « subprocess.Popen » ?

Mary-Kate Olsen
Libérer: 2024-12-19 06:04:51
original
590 Les gens l'ont consulté

How to Correctly Pass String Input to `subprocess.Popen`'s stdin?

Passer une entrée de chaîne à Subprocess.Popen via Stdin

Problème :

Passer une chaîne dans l'argument stdin de subprocess.Popen à l'aide d'un objet cStringIO.StringIO entraîne une erreur, car le l'objet ne dispose pas de l'attribut fileno nécessaire.

Solution :

Pour résoudre ce problème, il est recommandé d'utiliser l'approche plus simple décrite dans la documentation Popen.communicate() . En définissant stdin=PIPE, vous pouvez créer un canal pour stdin et fournir l'entrée de chaîne directement à la méthode de communication.

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())

# Output:
# -> four
# -> five
# ->
Copier après la connexion

Remarque supplémentaire :

Pour Python 3.5 (3.6 pour l'encodage), subprocess.run simplifie le processus en vous permettant de transmettre une entrée de chaîne et de récupérer la sortie sous forme de chaîne en un seul clic. appeler.

from subprocess import run, PIPE

p = run(['grep', 'f'], stdout=PIPE,
        input='one\ntwo\nthree\nfour\nfive\nsix\n', encoding='ascii')
print(p.returncode)

# Output:
# -> 0
print(p.stdout)

# Output:
# -> four
# -> five
# -> 
Copier après la connexion

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