Capturer la sortie standard en temps réel à partir de l'exécution des commandes
Dans le domaine du développement de chatbots capables d'exécuter des commandes, une exigence courante est la capacité de récupérer et afficher la sortie standard (stdout) des scripts exécutés dans l'interface de discussion. Cependant, des défis surviennent lorsque l'on tente de récupérer la sortie standard en temps réel.
Le problème réside dans l'approche traditionnelle, qui collecte toute la sortie standard et la renvoie sous la forme d'une réponse unique. Pour surmonter ce problème, nous avons besoin d'un moyen de capturer et de diffuser en continu la sortie standard pendant l'exécution du script.
Une solution consiste à utiliser des canaux pour faciliter la communication en temps réel entre le script et le canal de discussion. Voici un extrait de code Python qui montre comment procéder :
<code class="python">import os import subprocess def reboot(command): process = subprocess.Popen(command, stdout=subprocess.PIPE, universal_newlines=True) for line in process.stdout: yield line if __name__ == "__main__": command = ["python", "test.py"] for line in reboot(command): print(line)</code>
Dans ce code, la fonction subprocess.Popen() est utilisée pour exécuter la commande spécifiée. Le paramètre stdout est défini sur subprocess.PIPE pour créer un canal pour la sortie stdout. L'argument universal_newlines=True garantit que la sortie est renvoyée au format texte plutôt qu'en octets.
La boucle for parcourt les lignes de la sortie stdout en temps réel, vous permettant de les diffuser dans le canal de discussion. Cette approche fournit une méthode continue de capture et d'affichage de la sortie standard, répondant aux exigences d'exécution en temps réel.
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!