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
Mary-Kate Olsenoriginal
2024-12-19 06:04:51591parcourir

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
# ->

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
# -> 

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!

Déclaration:
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