Comment passer le résultat de l'exécution d'une commande shell dans une liste en Python (version non bloquante)

Dans Comment passer le résultat de l'exécution d'une commande shell dans une liste en Python, il y avait une telle source. C'est une bonne idée, mais c'est dommage d'attendre que la commande shell se termine.

res_cmd_no_lfeed.py


#!/usr/bin/python

import subprocess

def res_cmd_lfeed(cmd):
  return subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True).stdout.readlines()

def res_cmd_no_lfeed(cmd):
  return [str(x).rstrip("\n") for x in res_cmd_lfeed(cmd)]

def main():
  cmd = ("ls -l")
  print(res_cmd_no_lfeed(cmd))

if __name__ == '__main__':
  main()

Alors utilisez le rendement

res_cmd_no_lfeed.py


#!/usr/bin/python

import subprocess

def res_cmd_lfeed(cmd):  #La valeur de retour n'est pas une liste mais chaque ligne
  for line in subprocess.Popen(cmd, stdout=subprocess.PIPE,shell=True).stdout:
      yield line

def res_cmd_no_lfeed(cmd):
  return [str(x).rstrip("\n") for x in res_cmd_lfeed(cmd)]

def main():
  cmd = ("ls -l")
  print(res_cmd_no_lfeed(cmd))

if __name__ == '__main__':
  main()

res_cmd_lfeed ne bloque pas jusqu'à la fin de la commande, mais renvoie un rendement lorsqu'il reçoit une ligne dans la boucle, c'est-à-dire qu'il arrête la boucle et renvoie le résultat à ce moment. Si on vous dit "Suivant", il reprendra et retournera le résultat suivant ... et ainsi de suite.

Dans cet exemple, res_cmd_no_lfeed attend que tous les tableaux soient terminés, donc cela n'a pas de sens. S'il s'agit d'une application Web, vous pouvez constamment renvoyer une réponse au navigateur.

De quoi es-tu heureux

forevertime.bat


@echo off
:TOP
echo %time%
goto top

Vous pouvez le voir en faisant quelque chose comme ça. Puisque ce fichier de commandes continue de sortir indéfiniment, la première source continue d'attendre avec readlines (), mais la seconde prend et traite le résultat de plus en plus. Comme "Tear off and throw".

Mise en garde. Le tuyau a un tampon

forevertime.bat(Version de sortie de masse)


@echo off
:TOP
set /P X=0123456789012345678901234567890123456789012345678901234567890123<NUL
set /P X=0123456789012345678901234567890123456789012345678901234567890123<NUL
set /P X=0123456789012345678901234567890123456789012345678901234567890123<NUL
set /P X=0123456789012345678901234567890123456789012345678901234567890123<NUL
set /P X=0123456789012345678901234567890123456789012345678901234567890123<NUL
set /P X=0123456789012345678901234567890123456789012345678901234567890123<NUL
set /P X=0123456789012345678901234567890123456789012345678901234567890123<NUL
set /P X=0123456789012345678901234567890123456789012345678901234567890123<NUL
echo %time%
goto top

Je pense que je peux régler de plus en plus, mais je me demande si je devrais le laisser ici.

Recommended Posts

Comment passer le résultat de l'exécution d'une commande shell dans une liste en Python (version non bloquante)
Comment passer le résultat de l'exécution d'une commande shell dans une liste en Python
[sh] Comment stocker les résultats de l'exécution de la commande dans des variables
Comment obtenir une liste de fichiers dans le même répertoire avec python
Comment obtenir la dernière (dernière) valeur d'une liste en Python
Comment obtenir une liste d'exceptions intégrées pour python
Comment vérifier en Python si l'un des éléments d'une liste est dans une autre liste
Comment déterminer l'existence d'un élément sélénium en Python
Comment vérifier la taille de la mémoire d'un dictionnaire en Python
Comment mettre à jour la version Python de Cloud Shell dans GCP
linux / c> lien> Obtenir le résultat de l'exécution de la commande shell dans le programme C> On m'a appris à utiliser popen ()
Comment effacer un taple dans une liste (Python)
Copiez la liste en Python
[Python] Comment mettre n'importe quel nombre d'entrées standard dans la liste
[Introduction à Python] Comment trier efficacement le contenu d'une liste avec le tri par liste
[Linux] Une commande pour obtenir une liste des commandes exécutées dans le passé
Comment bien formater une liste de dictionnaires (ou d'instances) en Python
Comment obtenir le nombre de chiffres en Python
Un mémorandum expliquant comment exécuter la commande magique! Sudo dans Jupyter Notebook
Comment exécuter une commande à l'aide d'un sous-processus en Python
Comment compter le nombre d'occurrences de chaque élément de la liste en Python avec poids
Comment trouver le premier élément qui correspond aux critères de la liste Python
[Python] Comment créer une liste de chaînes de caractères caractère par caractère
Comment mélanger une partie de la liste Python (au hasard.shuffle)
Comment utiliser la méthode __call__ dans la classe Python
Obtenez le nombre d'éléments spécifiques dans la liste python
Comment développer dans un environnement virtuel Python [Memo]
Comment connecter le contenu de la liste dans une chaîne de caractères
Dans la commande python, python pointe vers python3.8
Comment obtenir la version Python
Obtenir la valeur d'une clé spécifique jusqu'à l'index spécifié de la liste de dictionnaires en Python
[Python] Comment supprimer des lignes et des colonnes dans une table (liste des options de méthode de dépôt)
[OCI] Script Python pour obtenir l'adresse IP d'une instance de calcul dans Cloud Shell
Comment compter rapidement la fréquence d'apparition des caractères à partir d'une chaîne de caractères en Python?
Comment passer des arguments à un script Python dans SPSS Modeler Batch
Essayez d'obtenir la liste des fils du bulletin d'information (je n'aime pas) avec Python.
Comment obtenir une chaîne à partir d'un argument de ligne de commande en python
[Introduction à Python] Comment utiliser l'opérateur in dans l'instruction for?
[Python3] Définition d'un décorateur qui mesure le temps d'exécution d'une fonction
Comment supprimer plusieurs positions (index) spécifiées dans une liste Python
[Python] Un programme qui fait pivoter le contenu de la liste vers la gauche
Comment vérifier la version de Django
[Python] Comment convertir une liste bidimensionnelle en liste unidimensionnelle
Afficher une liste d'alphabets en Python 3
Le résultat de l'installation de python sur Anaconda
Comment obtenir stacktrace en python
Comment vérifier la version d'opencv avec python
[Python / Tkinter] Comment passer des arguments à la commande
Résumé de l'utilisation de la liste Python
Comment masquer l'invite de commande lors de l'exécution de python dans Visual Studio 2015
Comment envoyer une image visualisée des données créées en Python à Typetalk
Je veux convertir par lots le résultat de "chaîne de caractères" .split () en Python
Je souhaite trier une liste dans l'ordre des autres listes
Recevez une liste des résultats du traitement parallèle en Python avec starmap
Je souhaite laisser une commande arbitraire dans l'historique des commandes de Shell
J'ai fait un programme pour vérifier la taille d'un fichier avec Python
Comment trier en spécifiant une colonne dans le tableau Python Numpy.
[Version terminée] Essayez de connaître le nombre d'habitants de la ville à partir de la liste d'adresses avec Python
Comment utiliser la bibliothèque C en Python
Comment recevoir des arguments de ligne de commande en Python