未知速记标志:-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”的主要内容,如果未能解决你的问题,请参考以下文章

使用针对未知列数的自定义顺序对pandas中的列进行排序

MySQL 5 左连接未知列

在 Adob​​e AIR 中读取未知编码的文本文件

matlab中的1e10是啥意思?

SailsJS/MySQL:“字段列表”中的未知列“NaN”

jquery中的DOM事件绑定与解绑