首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Paramiko不能远程执行命令。

Paramiko不能远程执行命令。
EN

Stack Overflow用户
提问于 2022-02-15 03:36:57
回答 1查看 153关注 0票数 0
代码语言:javascript
复制
    import paramiko
    client = paramiko.SSHClient()
    client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    client.connect(hostname='ip', port=22, username='', password='')
    stdin, stdout, stderr = client.exec_command("docker exec -it chb /bin/bash -c 'clickhouse-backup create'")
    stdin.close()
    stderr.close()

打印客户端通常可以远程登录,Exec_命令远程执行似乎没有执行。

EN

回答 1

Stack Overflow用户

发布于 2022-02-15 04:12:48

exec_command没有被很好地记录下来。运行时,命令在服务器上开始执行,并返回stdin、out和err的流。假设您的示例是完整的代码,则在命令有机会完成之前退出脚本。出口关闭取消命令的ssh通道。添加读取stdout的代码,并等待命令完成。

代码语言:javascript
复制
import paramiko
import threading

class ErrReader(threading.Thread)
    
    def __init__(self, stream):
        super().__init__(self)
        self.start()
        self.stream = stream

    def run(self):
        for line in self.stream:
            print("ERR", line, end="")

client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(hostname='ip', port=22, username='', password='')
stdin, stdout, stderr = client.exec_command("docker exec -it chb /bin/bash -c 'clickhouse-backup create'")
err_reader = ErrReader(stderr)
stdin.close()
stderr.close()
for line in stdout:
    print(line, end="")
print(stdout.channel.recv_exit_status())
err_reader.join()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71120856

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档