从Paramiko ssh客户端第二次阅读标准输出不起作用

pu82cl6c  于 2022-11-08  发布在  PyCharm
关注(0)|答案(1)|浏览(132)

我有一个python函数来读取一个特定的docker容器日志。
首先,我尝试获取容器ID,如下所示

def test_1():
    logging.info("Test debug logs")
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh.connect('10.18.18.10', username='usr1', password='pwd1')
    ssh_stdin, ssh_stdout, ssh_stderr = ssh.exec_command('sudo docker ps -aqf "name=container1"')
    container_id = ssh_stdout.read().decode("utf-8").replace('\n', '')   
    ssh_stdin, ssh_stdout, ssh_stderr = ssh.exec_command(f'sudo docker logs -f {container_id} --since 4m')
    container_logs = ssh_stdout.read()
    ssh.close()

我可以很好地获取 container_id。但是我没有获取 container_logs。当我尝试检索日志时,执行仍在继续。
无论如何,从技术上讲,我也可以通过容器名称读取Docker日志。但我需要知道为什么我第二次无法读取输出。

slmsl1lt

slmsl1lt1#

docker命令将继续等待,因为它被执行以显示实时日志。
要解决这个问题,我需要做如下

ssh_stdin, ssh_stdout, ssh_stderr = ssh.exec_command(f'sudo docker logs {container_id} --since 4m')

需要从命令中删除“-f”,这样它就不会一直保留。

相关问题