【发布时间】:2023-03-25 20:05:01
【问题描述】:
我正在尝试在python 中执行bash 命令
我要执行的bash命令是:kubectl get ns | grep -E '(^|\s)OK($|\s)'
在 python 中,我这样做:
is_namespace_exists = subprocess.call(["kubectl", "get", "ns", "|", "grep", "-E", "\'(^|\s)"+NAMESPACE+"($|\s)\'"])
和
is_namespace_exists = subprocess.call(["kubectl", "get", "ns", "|", "grep", "-E", "'(^|\s)"+NAMESPACE+"($|\s)'"])
但我收到此错误:
未知的速记标志:'E' in -E
谁能告诉我出了什么问题?
【问题讨论】:
-
当我在普通终端中执行此操作时,它可以工作。当我使用 python 执行它时,它不会。
-
我收回我之前的评论。它被解释为
kubectl的参数,因为|对subprocess没有任何意义。它只在 shell 中有意义。subprocess不通过 shell 解析命令。 -
那么我能做些什么呢?我需要那个管道(
|) -
您需要在
subprocess.call调用中使用shell=True,并将其传递给字符串而不是列表。 -
我可能更喜欢只执行
['kubectl', 'get', 'ns'],然后在 Python 中进行一点点字符串处理。
标签: python