Übergeben des Ausführungsergebnisses eines Shell-Befehls in einer Liste in Python (nicht blockierende Version)

In So übergeben Sie das Ausführungsergebnis eines Shell-Befehls in einer Liste in Python gab es eine solche Quelle. Dies ist eine gute Idee, aber es ist eine Schande, auf den Abschluss des Shell-Befehls zu warten.

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

Verwenden Sie also Ausbeute

res_cmd_no_lfeed.py


#!/usr/bin/python

import subprocess

def res_cmd_lfeed(cmd):  #Der Rückgabewert ist keine Liste, sondern jede Zeile
  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 blockiert erst am Ende des Befehls, gibt jedoch eine Ausbeute zurück, wenn eine Zeile in der Schleife empfangen wird, dh die Schleife wird gestoppt und das Ergebnis zu diesem Zeitpunkt zurückgegeben. Wenn Ihnen "Weiter" mitgeteilt wird, wird das nächste Ergebnis fortgesetzt und zurückgegeben ... und so weiter.

In diesem Beispiel wartet res_cmd_no_lfeed, bis alle Arrays abgeschlossen sind, sodass dies keinen Sinn ergibt. Wenn es sich um eine Web-App handelt, können Sie eine Antwort kontinuierlich an den Browser zurückgeben.

Worüber freust du dich?

forevertime.bat


@echo off
:TOP
echo %time%
goto top

Sie können es sehen, indem Sie so etwas tun. Diese Batch-Datei wird unbegrenzt ausgegeben. Wenn es sich also um die erstere Quelle handelt, wartet sie weiterhin mit readlines (), während die letztere das Ergebnis immer mehr aufnimmt und verarbeitet. Wie "Abreißen und werfen".

Hinweis. Die Pipe hat einen Puffer

forevertime.bat(Massenausgabeversion)


@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

Ich denke, ich kann immer mehr stimmen, aber ich frage mich, ob ich es hier lassen soll.

Recommended Posts

Übergeben des Ausführungsergebnisses eines Shell-Befehls in einer Liste in Python (nicht blockierende Version)
So übergeben Sie das Ergebnis der Ausführung eines Shell-Befehls in einer Liste in Python
[sh] Das Speichern der Befehlsausführung führt zu Variablen
So erhalten Sie mit Python eine Liste der Dateien im selben Verzeichnis
So erhalten Sie den letzten (letzten) Wert in einer Liste in Python
So erhalten Sie eine Liste der integrierten Ausnahmen für Python
So überprüfen Sie in Python, ob sich eines der Elemente einer Liste in einer anderen Liste befindet
So bestimmen Sie die Existenz eines Selenelements in Python
So überprüfen Sie die Speichergröße eines Wörterbuchs in Python
So aktualisieren Sie die Python-Version von Cloud Shell in GCP
linux / c> link> Ruft das Ausführungsergebnis des Shell-Befehls im C-Programm ab.> Mir wurde beigebracht, wie man popen () verwendet.
So löschen Sie einen Taple in einer Liste (Python)
Kopieren Sie die Liste in Python
[Python] So fügen Sie eine beliebige Anzahl von Standardeingaben in die Liste ein
[Einführung in Python] So sortieren Sie den Inhalt einer Liste effizient mit Listensortierung
[Linux] Ein Befehl zum Abrufen einer Liste der in der Vergangenheit ausgeführten Befehle
So formatieren Sie eine Liste von Wörterbüchern (oder Instanzen) in Python
So ermitteln Sie die Anzahl der Stellen in Python
Ein Memorandum zur Ausführung des Befehls! Sudo magic in Jupyter Notebook
So führen Sie einen Befehl mit einem Unterprozess in Python aus
So zählen Sie die Anzahl der Vorkommen jedes Elements in der Liste in Python mit der Gewichtung
So finden Sie das erste Element, das den Kriterien in der Python-Liste entspricht
[Python] So erstellen Sie eine Liste von Zeichenfolgen Zeichen für Zeichen
So mischen Sie einen Teil der Python-Liste (at random.shuffle)
Verwendung der Methode __call__ in der Python-Klasse
Holen Sie sich die Anzahl der spezifischen Elemente in der Python-Liste
So entwickeln Sie in einer virtuellen Python-Umgebung [Memo]
So verbinden Sie den Inhalt der Liste mit einer Zeichenfolge
Im Python-Befehl zeigt Python auf Python3.8
So erhalten Sie die Python-Version
Ruft den Wert eines bestimmten Schlüssels bis zum angegebenen Index der Wörterbuchliste in Python ab
[Python] So löschen Sie eine Zeile / Spalte in einer Tabelle (Liste der Optionen für die Drop-Methode)
[OCI] Python-Skript zum Abrufen der IP-Adresse einer Recheninstanz in Cloud Shell
Wie kann man schnell die Häufigkeit des Auftretens von Zeichen aus einer Zeichenfolge in Python zählen?
Übergeben von Argumenten an Python-Skripte in SPSS Modeler Batch
Versuchen Sie, die Thread-Liste der Nachrichten (Abneigung) mit Python zu erhalten.
So erhalten Sie eine Zeichenfolge aus einem Befehlszeilenargument in Python
[Einführung in Python] Wie verwende ich den Operator in in der for-Anweisung?
[Python3] Definition eines Dekorators, der die Ausführungszeit einer Funktion misst
So löschen Sie mehrere angegebene Positionen (Indizes) in einer Python-Liste
[Python] Ein Programm, das den Inhalt der Liste nach links dreht
So überprüfen Sie die Version von Django
[Python] So konvertieren Sie eine zweidimensionale Liste in eine eindimensionale Liste
Zeigen Sie eine Liste der Alphabete in Python 3 an
Das Ergebnis der Installation von Python auf Anaconda
Wie bekomme ich Stacktrace in Python?
So überprüfen Sie die Version von opencv mit Python
[Python / Tkinter] Übergeben von Argumenten an den Befehl
Zusammenfassung der Verwendung der Python-Liste
So blenden Sie die Eingabeaufforderung aus, wenn Sie Python in Visual Studio 2015 ausführen
So senden Sie ein visualisiertes Bild der in Python erstellten Daten an Typetalk
Ich möchte das Ergebnis von "Zeichenfolge" .split () in Python stapelweise konvertieren
Ich möchte eine Liste in der Reihenfolge anderer Listen sortieren
Erhalten Sie eine Liste der Ergebnisse der Parallelverarbeitung in Python mit Starmap
Ich möchte einen beliebigen Befehl im Befehlsverlauf von Shell belassen
Ich habe ein Programm erstellt, um die Größe einer Datei mit Python zu überprüfen
Sortieren durch Angabe einer Spalte im Python Numpy-Array.
[Abgeschlossene Version] Versuchen Sie, die Anzahl der Einwohner der Stadt anhand der Adressliste mit Python herauszufinden
Verwendung der C-Bibliothek in Python
So empfangen Sie Befehlszeilenargumente in Python