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