繁体   English   中英

Kubernetes pod exec 使用 python 客户端不是很有交互性

[英]Kubernetes pod exec using python client not very interactive

我正在按照官方示例使用 python kubernetes-client 库执行到 Kubernetes 容器中。

from kubernetes import config
from kubernetes.client.api import core_v1_api
from kubernetes.stream import stream


def exec_commands(api_instance):

    resp = stream(api_instance.connect_get_namespaced_pod_exec,
                  'busybox',
                  'default',
                  command=['/bin/sh'],
                  stderr=True, stdin=True,
                  stdout=True, tty=True,
                  _preload_content=False)

    while resp.is_open():
        resp.update(timeout=1)
        if resp.peek_stdout():
            print("%s" % resp.read_stdout())
        if resp.peek_stderr():
            print("%s" % resp.read_stderr())

        command = input()

        if command == "exit":
            break
        else:
            resp.write_stdin(command + "\n")

    resp.close()


def main():
    config.load_kube_config("~/.kube/config")
    core_v1 = core_v1_api.CoreV1Api()
    exec_commands(core_v1)


if __name__ == '__main__':
    main()

上面的代码能够执行到容器中。 但是,shell 的交互性不是很好。 它的问题是: -

  1. 箭头键不起作用。 按箭头时,exec 显示^[[D^[[C^[[A^[[B字符

  2. 选项卡自动完成不起作用。 当我按下制表符时,它将制表符作为输入空格而不是自动完成。

  3. 我必须按两次 Enter 键才能获得命令 output。 例子:-

     ls / # ls abc.txt etc root tmp bin home sys usr dev proc terminfo.src var / #
  4. 由于无法使用箭头和转义键,无法在容器内使用 vi 编辑器。 例子:-

first line
^[[C^[[D^[[C^[[B

有没有更好的方法可以使用 python 以编程方式执行到 kubernetes 容器中?

我无法添加评论,所以会在这里回复。

我建议查看readlinecurses以正确处理箭头键和其他与终端相关的问题。

first line
^[[C^[[D^[[C^[[B

您看到这一点是因为终端使用转义序列来正确处理箭头键。 print("%s" % resp.read_stdout())这个组合很可能不能很好地处理,这就是为什么你会看到部分转义序列和一些其他字母。

我可以建议调查管道 这样你就不会通过printread_stdout函数传递你的输入/输出,它们更适合字符串而不是终端。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM