[英]Paramiko finish process before reading all output
我正在嘗試制作一個實時SSH庫,但通常會遇到一些麻煩,我從python paramiko模塊中的ssh命令中使用了這段代碼(以及如何結束它們) 。 但是此代碼不會顯示整個輸出。
我猜想,當while循環在channel.exit_status_ready()上退出時,該通道仍然有要讀取的數據。 我一直在嘗試解決此問題,但並非所有輸入均已解決。
如何使這項工作能夠打印所有類型的命令?
import paramiko
import select
client = paramiko.SSHClient()
client.load_system_host_keys()
client.connect('host.example.com')
channel = client.get_transport().open_session()
channel.exec_command("cd / && ./test.sh")
while True:
if channel.exit_status_ready():
break
rl, wl, xl = select.select([channel], [], [], 0.0)
if len(rl) > 0:
print channel.recv(1024)
test.sh:
echo 1
wait 1
echo 2
wait 1
echo 3
輸出:
1
2
Process finished with exit code 0
謝謝。
我無法重現您的命令問題,但可以使用cat some_big_file.txt
類的命令重現問題。
因此,看起來您的假設正確。 在您從channel
讀取所有內容之前,可以准備退出狀態。 還不清楚您是否真的需要使用select
。 如果沒有,我會重寫循環:
while True:
buf = channel.recv(1024)
if not buf:
break
print buf
這樣的循環將在其中包含一些數據的同時繼續讀取該通道。 如果您確實要使用select
,則可以將上述循環放在循環之后。 它將讀取並打印剩余數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.