![](/img/trans.png)
[英]How to display command output in Flask using the Subprocess python module
[英]Is there a way to exec into an open shift pod and capture the output of a command using the python subprocess module?
我目前正在從事的項目有多個在 Redhat Openshift 中運行的 pod。 我希望能夠運行 python 腳本來查看當前在項目中運行的每個 pod 的版本,而不是手動進入每個 pod 並檢查版本。
這是我想要實現的基本偽代碼:
通過使用 python 中的子進程模塊,我已經能夠一直走到最后一步。我想弄清楚的是,是否有辦法執行到 pod 中,然后運行命令,捕獲 output ,然后退出。 這是我到目前為止的代碼
import subprocess
from subprocess import PIPE
if __name__ == '__main__':
projects = subprocess.run(['oc', 'projects'], capture_output=True)
if projects.returncode != 0:
print('Error obtaining open shift projects, make sure you are logged in and have the correct permissions')
project = subprocess.run(['oc', 'project', 'my-project'])
pods = subprocess.run(['oc', 'get', 'pods'], stdout=PIPE).stdout.splitlines()
for pod in pods:
curr_pod = pod.split()[0].decode()
exec = subprocess.run(['oc', 'exec', '-it', curr_pod, '--', 'bash'], capture_output=True, shell=True)
print(curr_pod)
if exec.returncode == 0:
version = subprocess.run(['ls'])
print(curr_pod, version.stdout)
subprocess.run(['exit'], shell=True)
Exec 似乎可以解決進入 pod 的問題,但之前的命令沒有給我預期的 output。 如果我能夠在進入每個 pod 后對每個 pod 執行 'ls',並為每個 pod 執行此操作,那將足以完成工作。 提前致謝,這是我的第一個 Stack Overflow 問題,所以我很樂意詳細說明。
import subprocess
from subprocess import PIPE
if __name__ == '__main__':
projects = subprocess.run(['oc', 'projects'], capture_output=True)
if projects.returncode != 0:
print('Error obtaining open shift projects, make sure you are logged in and have the correct permissions')
project = subprocess.run(['oc', 'project', 'my-project'])
pods = subprocess.run(['oc', 'get', 'pods', '--no-headers'], stdout=PIPE).stdout.splitlines()
for pod in pods:
curr_pod = pod.split()[0].decode()
exec = subprocess.run(['oc', 'exec', curr_pod, '--', 'ls'])
print(curr_pod, exec.stdout)
我稍微修改了oc exec
命令,以便能夠將ls
的 output 打印到終端。 還添加了--no-headers
以避免在運行oc get pods
時打印 header 文件。 希望這就是您要找的。
看起來您只想運行一個命令。 oc cli 允許您執行單個命令,而無需 shell 進入帶有交互式 pod 的 pod
$ oc execute <pod> "ls"
會做我認為你正在尋找的事情。
因此,為了稍微重寫您的代碼,我不會像您那樣切換項目,而是使用 -n 來指定命名空間/項目。 這是未經測試的,因此可能有語法錯誤
import subprocess
from subprocess import PIPE
if __name__ == '__main__':
projects = subprocess.run(['oc', 'projects'], capture_output=True)
if projects.returncode != 0:
print('Error obtaining open shift projects, make sure you are logged in and have the correct permissions')
pods = subprocess.run(['oc', 'get', 'pods', '-n', 'my-project'], stdout=PIPE).stdout.splitlines()
for pod in pods:
curr_pod = pod.split()[0].decode()
version_result = subprocess.run(['oc', '-n', 'my-project', 'exec', curr_pod, 'ls'], stdout=PIPE).stdout.splitlines()
print(curr_pod)
print(version_result)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.