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
を使用することです: