Trudno mi zrozumieć, jak działa funkcja recv()
.Jak działa funkcja paramiko Channel.recv()?
http://docs.paramiko.org/en/1.13/api/channel.html#paramiko.channel.Channel.recv
Rozumiem to odbiera kawałek do danych przy każdym wywołaniu funkcji, ale może ktoś rozwinąć struktury i wielkości tych danych? Powiedzmy, mogę wysłać polecenie date
, zauważam:
- 1-te odczytu dostaje: "Date"
- 2-ta odczytu pobiera: rzeczywista odpowiedź (Pn cze 9 12:04:17 CDT 2014)
- 3rd odczytu gets: prompt
Ale w jaki sposób obsługuje on debugowanie wiadomości, które pojawiają się losowo na terminalu?
Czy poprzedni wzór jest prawdziwy, o ile faktyczna odpowiedź jest mniejsza niż maksymalna liczba bajtów (nbytes
)?
Co stanie się, jeśli przekroczy on nbytes
?
Jak na życzenie, dodałem fragment poniższy kod:
while reads<maxReads:
resp = self.__chan.recv(maxBytes)
print resp
self.__buffer += resp
if resp.endswith('$ ') or resp.endswith('# '):
break
reads += 1
Należy otrzymać do nbytes. Wszystko większe i zajmie maksymalną porcję bajtów. Coś mniej i zwróci wszystko, ponieważ jest mniejsze niż maksymalny rozmiar. Następnym razem, gdy wywołasz channel.recv, będzie on kontynuowany tam, gdzie został przerwany ostatni. Nie ma znaczenia, gdzie w poleceniu zostało przerwane, zajmie tylko określoną maksymalną liczbę bajtów. Wszelkie monity wysyłane do stderr będą musiały używać recv_stderr. Nie jestem pewien, czy to odpowie na twoje pytanie. – Bob
ummm jeden z nich :) ... Wysyłając polecenie, a wywołanie recv następnie dostaje mi samo polecenie, a nie rzeczywistą odpowiedź – user3388884
możemy zobaczyć kod, w którym wysyłasz i recv? Może być coś prostego w tym, jak to napisałeś, być może nie zauważyłeś. – MikeRixWolfe