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之后还会跳回登录界面,进程还是没有结束
Pertama sekali, saya nyatakan bahawa terdapat masalah dengan perenggan ini. Ini adalah masalah pencetakan p.stdout.readline() != '' tidak sepatutnya diletakkan dalam seketika, kerana selepas data dibaca , ia akan dibuang , supaya data yang lengkap tidak boleh dicetak dan ditulis ke fail sad.txt
Kedua, saya rasa p.stdout harus dibuat tanpa sekatan untuk menyelesaikan masalah yang tersekat
Terperangkap ini mungkin disebabkan oleh proses ssh tidak keluar.
tersekat kerana paip kosong selepas membaca baris terakhir, dan untuk perintah
ifconfig
, baris terakhir bukan ruang tetapi n:Untuk mengelakkan kematian yang disebabkan oleh IO, kaedah yang disyorkan secara rasmi adalah menggunakan
communicate
, seperti ini: