簡體   English   中英

在讀取所有輸出之前,Paramiko完成處理

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM