代码之家  ›  专栏  ›  技术社区  ›  user13643099

Python2.7使用子流程。Popen向kubectl exec发送了一封不工作的吊舱

  •  1
  • user13643099  · 技术社区  · 2 年前

    之前我使用了一个python语句,比如 操作系统。系统(“kubectl exec——it bash xxx”)执行到kubernetes pod中,它最终将我重定向到pod的bash,我可以直接键入命令。有人建议使用子流程。Popen取而代之,因为它更安全,所以我尝试了类似的方法

    subprocess.Popen(["kubectl", "exec"] + kube_args + ["-it", pod_name, "--", "bash"],
                 stdout=subprocess.PIPE)
    

    python脚本运行了一遍,但结果就像什么都没发生一样(没有将我重定向到pod的交互式bash。为了实现这一点,正确的命令等价物应该是什么?谢谢。

    1 回复  |  直到 2 年前
        1
  •  0
  •   J_H    2 年前

    这是原语,你说得对。 返回一个子流程 proc ,您可以 进一步互动:

    proc = Popen( ... )
    

    或者更好:

    with Popen( ... ) as proc:
    

    有一些方便的功能 在基本体的顶部分层。 check_call() 在这里最有意义。 它会耐心地等待孩子的死亡, 通常在远程键入“exit”时 bash . 它为您调用Popen()并管理细节, 所以你不必这么做。