python - 来自 Python 的 awk : wrong subprocess arguments?

标签 python awk pattern-matching subprocess

我需要在 Python 中运行以下(有效的)命令:

ip route list dev eth0 | awk ' /^default/ {print $3}'

使用 subprocess,我必须执行以下操作:

first = "ip route list dev eth0"
second = "awk ' /^default/ {print $3}'"
p1 = subprocess.Popen(first.split(), stdout=subprocess.PIPE)
p2 = subprocess.Popen(second.split(), stdin=p1.stdout, stdout=subprocess.PIPE)
p1.stdout.close()  # Allow p1 to receive a SIGPIPE if p2 exits.
output = p2.communicate()[0]

p2 出了点问题。我得到:

>>> awk: cmd. line:1: '
awk: cmd. line:1: ^ invalid char ''' in expression

我该怎么办?在终端上它运行完美。

最佳答案

split 在任何空格处拆分,包括单引号参数内的空格。如果确实需要,请使用 shlex.split:

import shlex
p2 = subprocess.Popen(shlex.split(second), stdin=p1.stdout, stdout=subprocess.PIPE)

然而,直接指定命令通常更有意义:

first = ['ip', 'route', 'list', 'dev', 'eth0']
second = ['awk', ' /^default/ {print $3}']
p1 = subprocess.Popen(first, stdout=subprocess.PIPE)
p2 = subprocess.Popen(second, stdin=p1.stdout, stdout=subprocess.PIPE)

关于python - 来自 Python 的 awk : wrong subprocess arguments?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15414244/

相关文章:

python beautifulsoup 添加额外的结束标签

linux - AWK 处理数据直到下一次匹配

bash - AWK 寻找一种方法来打印包含逗号分隔字符串中的单词的行

bash - 如何在 bash 文件循环后使用增量命名输出文件?

jQuery 通过 ID 进行过滤,然后捕获匹配项

c# - LINQ 是否有类似 Match 的语法

python - 强制 GIL 不切换线程

python - 向 Python 中的所有线程发送单向消息

python - 将 PySpark DenseVector 转换为数组

PostgreSQL - 模式匹配 - 字符串到子字符串