Bilinmeyen bir durumdan kurtarıldıktan sonra hat üzerindeki herhangi bir karakteri temizlemeye çalışıyorum; çünkü bazı durumlarda, ileride beklenecek yöntem çağrıları için kullandıkları komutları ve diğer anahtar kelimeleri içerirler. Beklenmeyen davranışlara koşmaya devam ederken, karışık sonuçlar içeren birden çok yaklaşımı denedim.python pidhon'un temizlenmesi veya temizlenmesi
Görülme beklenmedik davranışlar (Python 2.7.9 ile pexpect V3.3 kullanarak):
ben sonradan tampon okumaya çalıştığınızda, aşağıdaki kodu gerçekleştirdikten sonra bazen ben hatalı davranış nerede sadece görmeleri Birikmiş karakterlerin bir kısmı temizlendi. Bu benim aşağı akım mantığım üzerinde yıkıcıdır. Bunun, tüm ipliğin 5 saniyeliğine uyku moduna geçtiğini, dolayısıyla uyandığında, read_nonblocking() komutunu çalıştırmadan önce tam gelen arabelleği almak için zamanın olmadığına inanıyorum.
time.sleep(5) flushedStuff += child.read_nonblocking(100000, timeout=0)
Ben engellenmeyen bir şekilde çizgi temizlemek için .expect çağrıyı kullanmaya çalıştığınızda
, bir ZAMAN AŞIMI istisna sonrası gelen tampon temizlenmez öğrendim. İçeriği child.before özellikte beklendiği gibi bulunabilir, ancak sonraki .expect yöntem çağrısı sırasında da ayrıştırılır. Yani bu hiç de çizgiyi temizlemiyor! Ayrıca, read_nonblocking() işlevinin yerel arabellekten okumadığını, ancak işletim sisteminden doğrudan satırdan okunduğunu fark ettim, dolayısıyla bunu görmüyor. Yani bütün bunlardan sonra, şu andaki çözüm hattını teşvik etmek güvenilir bir yol sağlamak üzeretry: child.expect("ZzqQJjSh_Impossible_String", timeout = 5) except pexpect.TIMEOUT: pass flushedStuff = child.before
class ExtendedSpawn(pexpect.spawn):
def flushBuffer(delay)
try:
# Greedily read in all the incoming characters
self.expect("ZzqQJjSh_Impossible_String", timeout = delay)
except pexpect.TIMEOUT:
pass
# Clear local input buffer inside the spawn Class
self.buffer = self.string_type()
return self.before
Yukarıdaki yöntem, engelleme olmayan bir uyku komutu için de kullanılabilir. Bu, basit olması gereken bir şey için bir yaklaşımın çok karmaşık bir yolu gibi görünüyor, bunun üzerine birkaç gün israf ettiğimi belirtmekten çok uzak görünüyor. Bunu yapmanın daha iyi bir yolu var mı?
Teşekkürler!