>  Q&A  >  본문

python - 使用subprocess调用外部程序,p.stdout读取内容卡死

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之后还会跳回登录界面,进程还是没有结束

大家讲道理大家讲道理2741일 전1271

모든 응답(3)나는 대답할 것이다

  • ringa_lee

    ringa_lee2017-04-18 09:05:10

    으아악

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

    으아악

    회신하다
    0
  • PHPz

    PHPz2017-04-18 09:05:10

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

    회신하다
    0
  • 高洛峰

    高洛峰2017-04-18 09:05:10

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

    입니다. 으아악

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

    으아악

    회신하다
    0
  • 취소회신하다