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