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之后还会跳回登录界面,进程还是没有结束
으아악
먼저 이 단락에 문제가 있다는 점을 지적합니다. 이는 인쇄 문제입니다. p.stdout.readline() != ''는 데이터를 읽은 이후에 배치하면 안 됩니다. , 삭제되므로 전체 데이터를 sad.txt 파일에 인쇄하거나 쓸 수 없습니다.
으아악둘째, 문제를 해결하려면 p.stdout을 비차단으로 만들어야 한다고 생각합니다
이러한 중단 현상은 SSH 프로세스가 종료되지 않아 발생했을 수 있습니다.
는 마지막 줄을 읽은 후 파이프가 비어 있어서 멈췄으며,
입니다. 으아악ifconfig
명령의 경우 마지막 줄은 공백이 아니라 n:IO로 인한 사망을 방지하기 위해 공식적으로 권장되는 방법은 다음과 같은
으아악communicate
을 사용하는 것입니다.