未知速记标志:-E 中的“E”
Posted
技术标签:
【中文标题】未知速记标志:-E 中的“E”【英文标题】:Unknown shorthand flag: 'E' in -E 【发布时间】:2019-11-27 14:43:23 【问题描述】:我正在尝试在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 中进行一点点字符串处理。
【参考方案1】:
以下代码应该可以工作:
import subprocess
NAMESPACE = "..." # Define NAMESPACE variable here
proc1 = subprocess.Popen(['kubectl', 'get', 'ns'], stdout=subprocess.PIPE)
proc2 = subprocess.Popen(["grep", "-E", "\'(^|\s)"+NAMESPACE+"($|\s)\'"], stdin=proc1.stdout, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
proc1.stdout.close() # Allow proc1 to receive a SIGPIPE if proc2 exits.
out, err = proc2.communicate()
print('out: 0'.format(out))
print('err: 0'.format(err))
基本上是this post的改编版。根据您的需要进行调整。
【讨论】:
以上是关于未知速记标志:-E 中的“E”的主要内容,如果未能解决你的问题,请参考以下文章