【问题标题】:Executing Linux command in background from a python script从 python 脚本在后台执行 Linux 命令
【发布时间】:2022-06-18 00:18:10
【问题描述】:

我有一台运行 kubernetes 集群的 ubuntu 机器。我基本上是在尝试从 python3 脚本在后台运行 Kubernetes 命令,但它不起作用,请帮助...

下面是较大脚本的部分代码,我使用格式化字符串创建 cmd4,然后将 cmd4 作为 os.system(cmd4) 传递给 os.system。但是,一旦我执行脚本,它就会开始在 cmdline 中显示日志。我尝试使用 nohup 以及下面提到的方法,但它开始在 nohup.out 中填充日志。

for podname in pod_names:
    if "smf" in podname or "pcf" in podname or "udm" in podname:
        containername = 'worker'
    else:
        containername = 'cppe'

    **cmd4 = f"kubectl logs -f -n core {podname} --container={containername} > {podname}_{containername}_log </dev/null &>/dev/null &&"**
    cmd5 = f"echo $! >> pid.txt"
    os.system(cmd4)
    os.system(cmd5)
    pid_file = open('pid.txt', 'a+')
    pid_file.write("\n")
    pid_file.close

==================================

尝试使用 nohup 为:

cmd4 = f"nohup kubectl logs -f -n core {podname} --container={containername} > {podname}_{containername}_log /null &>/dev/null &&"

但它给出了这个o/p

更新的副本:1

deployment.apps/core-pcf 已配置 nohup:忽略输入并将输出附加到“nohup.out”

【问题讨论】:

  • subprocess 可能会给你比os.system() shell stuff 更好的结果

标签: python python-3.x kubernetes scripting