Maison > développement back-end > Tutoriel Python > Comment passer une chaîne en tant que stdin à subprocess.Popen ?

Comment passer une chaîne en tant que stdin à subprocess.Popen ?

Susan Sarandon
Libérer: 2024-12-06 13:04:12
original
588 Les gens l'ont consulté

How to Pass a String as stdin to subprocess.Popen?

Passer une entrée de chaîne à subprocess.Popen

L'erreur rencontrée lors de la tentative de transmission d'un objet StringIO en tant que stdin à subprocess.Popen révèle que StringIO les objets ne sont pas reconnus comme des objets de type fichier valides par le sous-processus. Pour résoudre ce problème et réussir à transmettre une chaîne en tant que stdin, il est nécessaire de créer d'abord un pipeline vers le processus Popen.

Utilisation de la création explicite de pipeline

Le sous-processus. La documentation communicate() suggère de créer un pipeline avec stdin=PIPE pour envoyer des données au stdin du processus. Ceci peut être réalisé en modifiant le code comme suit :

import subprocess
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

Ce code crée un canal vers le processus grep, permettant à la chaîne d'entrée d'être transmise via l'argument stdin.

Utilisation de subprocess.run (Python 3.5)

Pour les versions Python 3.5 et supérieures, subprocess.run peut être utilisé pour transmettre l'entrée sous forme de chaîne et récupérer la sortie sous forme de chaîne en un seul appel :

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

Cette approche fournit une alternative concise à la méthode de création de pipeline explicite.

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