bloc python subprocess commun ()
Je suis en utilisant le sous-processus module d'appeler un programme externe (plink.exe) pour vous connecter à un serveur, mais quand je l'appelle communiquer pour lire la sortie, c'est le blocage. Le code est ci-dessous:
import subprocess
process = subprocess.Popen('plink.exe [email protected] -pw 123456'.split(), shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
print process.communicate() #block here
Je sais que le bloc est parce que plink.exe
il court encore; mais j'ai besoin de lire la sortie avant que le sous-processus se termine. Est-il de toute façon?
source d'informationauteur Mingo | 2010-01-25
Vous devez vous connecter pour publier un commentaire.
Le but de l'
communicate
méthode est d'attendre la fin du processus et de retour de la sortie. Si vous ne voulez pas attendre, ne pas appelercommunicate
. Au lieu de cela, lire à partir de lastdout
oustderr
attribut pour lire la sortie.Si les sorties des processus à la fois
stdout
etstderr
(et vous souhaitez le lire séparément), vous devez être prudent lu à partir de deux sans blocage, ou vous pouvez impasse. C'est assez dur sur Windows, et vous pouvez utiliser lepexpect
module à la place.J'ai fait face à une situation similaire où j'ai eu à exécuter une commande unique
lmstat -a
et ensuite obtenir la sortie du terminal.Si vous avez juste besoin d'exécuter une seule commande et de lire ensuite la sortie, vous pouvez utiliser le code suivant: