Arkaplan: Ben bir ders için bir programda teslim etmek zorunda kaldığım her andan itibaren süreci otomatikleştirmek için python ve paramiko kullanıyorum. Kaynak kodu göndermek için "handin" adlı bir komut kullanıyoruz, ancak bu bir okul bilgisayarından yapılmalıdır. Bu yüzden, evden kod gönderdiğimde, şunları yapmam gerekiyor: okul sunucularına sftp, dosyaları bir bilgisayara, ssh'e, okul bilgisayarına koy, 'handin' komutunu kullan 'Python paramiko betiği, exec_command sırasında çıktı okuma sorunları()
Dosyaları okul makinelerine başarılı bir şekilde koyabiliyorum. Exec_command ('dosyalarımı el ile') kullanmaya çalıştığımda ve sonra sonraki eylemi belirlemek için çıktıyı okuduğumda sorun oluşuyor.
yüzden
try:
(stdin, stdout, stderr) = client.exec_command(s)
except:
print 'whoops'
sys.exit()
print stdout.readlines()
var Ama bu nedense bir kilitlenmeye neden, script hiçbir şey yapıyor gibi görünmektedir ve sonunda tüm süreci (ctrl + c çalışmıyor) öldürmek zorunda. Exec_command'ın doğru şekilde tamamlanmadığından (try/catch bloğundan çıkıyor olsa bile) veya ağ sorunlarına ya da neyin olduğuna emin değilim.
Herhangi bir fikrin var mı?
güncelleme:
sorun yürütülürken handin komutuyla etkileşim beraberdir. Komutu çalıştırdıktan sonra, handin hala çalışıyor olabilir veya olmayabilir. İlk gönderiminde başarı diyorsa, falan filan yapın ve yürütmeyi tamamlayın. Herşey iyi. Ancak tekrar gönderirsem her dosya için bir yazmayı (stdin.write ('y')) yetkilendirmem gerekiyor.
TL/DR:
nasıl exec_command() hala çalışan girişi için bekleyen ve taleb() buna göre stdout'ta gelen olup olmadığını kontrol edebilirim?
TL/DR için bir çözümünüz var mı? Ayrıca, girişi beklemeden önce metni nasıl bilebilirim, ör. @ parola ... –