import subprocess
import os
r=open("sad.txt",'a')
p = subprocess.Popen("ssh.exe root@192.168.58.154", stdin = subprocess.PIPE, stdout = subprocess.PIPE, stderr = subprocess.PIPE, shell = False)
p.stdin.write('password\n')
p.stdin.write('ifconfig\n')
while p.stdout.readline()!=' ':
line = p.stdout.readline() #如果p.stdout中内容被读完之后,程序会卡在这里
#line = line.strip()
print line
r.write(line)
这个卡死如何解决,这时候结束当前进程也没办法结束
或者如何判断卡死,然后p.kill()或“ctrl+c”当前进程
ssh执行p.stdin.write('exit\n')也不行,因为ssh exit之后还会跳回登录界面,进程还是没有结束
Tout d'abord, je souligne qu'il y a un problème avec ce paragraphe. Il s'agit d'un problème d'impression p.stdout.readline() != '' ne doit pas être placé dans un moment, car après la lecture des données. , il sera supprimé, de sorte que les données complètes ne puissent pas être imprimées et écrites dans le fichier sad.txt
.Deuxièmement, je pense que p.stdout devrait être rendu non bloquant pour résoudre le problème bloqué
Ce blocage est probablement dû au fait que le processus ssh ne se termine pas.
est bloqué car le tube est vide après lecture de la dernière ligne, et pour la commande
ifconfig
, la dernière ligne n'est pas un espace mais n:Pour prévenir les décès causés par IO, la méthode officiellement recommandée est d'utiliser
communicate
, comme celle-ci :