python - 使用subprocess调用外部程序,p.stdout读取内容卡死
大家讲道理
大家讲道理 2017-04-18 09:03:10
0
3
1309
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之后还会跳回登录界面,进程还是没有结束

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

모든 응답(3)
左手右手慢动作

으아악

먼저 이 단락에 문제가 있다는 점을 지적합니다. 이는 인쇄 문제입니다. p.stdout.readline() != ''는 데이터를 읽은 이후에 배치하면 안 됩니다. , 삭제되므로 전체 데이터를 sad.txt 파일에 인쇄하거나 쓸 수 없습니다.
둘째, 문제를 해결하려면 p.stdout을 비차단으로 만들어야 한다고 생각합니다

으아악
PHPzhong

이러한 중단 현상은 SSH 프로세스가 종료되지 않아 발생했을 수 있습니다.

小葫芦

는 마지막 줄을 읽은 후 파이프가 비어 있어서 멈췄으며, ifconfig 명령의 경우 마지막 줄은 공백이 아니라 n:

입니다. 으아악

IO로 인한 사망을 방지하기 위해 공식적으로 권장되는 방법은 다음과 같은 communicate을 사용하는 것입니다.

으아악
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿