无法在子进程命令中使用 grep

2023-12-03

我的子进程命令有问题,我喜欢 grep 出与“Online”行匹配的行。

def run_command(command):
    p = subprocess.Popen(command,shell=False,
                         stdout=subprocess.PIPE,
                         stderr=subprocess.STDOUT)
    return iter(p.stdout.readline, b'')

command = 'mosquitto_sub -u example -P example -t ITT/# -v | grep "Online" '.split()
for line in run_command(command):
    print(line)

但我会得到一个错误

Error: Unknown option '|'.



Use 'mosquitto_sub --help' to see usage.

但是当使用linux shell运行时

user@server64:~/Pythoniscriptid$ mosquitto_sub -u example -P example  -t ITT/# -v | grep "Online"
ITT/C5/link Online
ITT/IoT/tester55/link Online
ITT/ESP32/TEST/link Online

我也尝试过shell = True,但没有成功,因为我会收到另一个错误,无法识别该主题ITT/#

Error: You must specify a topic to subscribe to.



Use 'mosquitto_sub --help' to see usage.

“可能的重复”根本没有帮助我,所以我认为我遇到了不同的问题。我尝试将代码更改为此,但没有得到任何返回

def run_command(command,command2):
    p1 = subprocess.Popen(command,stdout=subprocess.PIPE,stderr=subprocess.STDOUT)
    p2 = subprocess.Popen(command2,stdin=p1.stdout,stdout=subprocess.PIPE)
    return iter(p2.stdout.readline,'')



command = 'mosquitto_sub -u example -P example -t ITT/# -v'.split()
command2 = 'grep Online'.split()

#subprocess.getoutput(command)

for line in run_command(command,command2):
    print(line)

当您拆分文本时,列表将如下所示

['mosquitto_sub', ..., 'ITT/#', '-v', '|', 'grep', '"Online"']

当您将此列表传递给 subprocess.Popen 时,一个文字'|'将是 mosquitto_sub 的参数之一。

如果你使用shell=True,您必须转义任何特殊字符,例如#在命令中,例如使用双引号:

import subprocess
command = 'echo -e "ITT/#\\ni am Online\\nbar Online\\nbaz" | grep "Online" '
p = subprocess.Popen(
    command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
for line in iter(p.stdout.readline, b''):
    print(line)

或者,按照您所写的方式连接管道,但请确保迭代直到b'', not u'':

import subprocess

def run_command(command, command2):
    p1 = subprocess.Popen(command,stdout=subprocess.PIPE,stderr=subprocess.STDOUT)
    p2 = subprocess.Popen(command2,stdin=p1.stdout,stdout=subprocess.PIPE)
    return iter(p2.stdout.readline, b'')

command = ['echo', '-e', 'ITT/#\\ni am Online\\nbar Online\\nbaz']
command2 = 'grep Online'.split()

for line in run_command(command,command2):
    print(line)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法在子进程命令中使用 grep 的相关文章

随机推荐

  • Javascript for 循环和警报

    我正在循环浏览链接列表 我可以正确获取标题属性 并希望它在单击时显示 当页面加载并单击链接时 所有链接标题都会一一提醒 我究竟做错了什么 function prepareShowElement var nav document getEle
  • 仅在 apex 报告的某些行上显示“编辑”链接

    我有以下报告结构 显示全年产品的销售目标和销售额 每个产品都有两行 一行显示销售额 一行显示 sales target 目前 我的报告在报告的每一行旁边都有一个编辑链接 有没有办法从 sales target 行中删除编辑链接 select
  • 无法使用 PRAW 从某些 Reddit 子版块中获取随机帖子

    我正在尝试使用此代码让一个不和谐的机器人从reddit发送图像 只是为了抓取而不是发送 def random post subreddit while True post reddit subreddit subreddit random
  • Android:如何获取自定义View的高度和宽度? [复制]

    这个问题在这里已经有答案了 我该如何使用getMeasuredWidth and getMeasuredHeight 它总是返回 0 这和有什么区别getHeight and getWidth 刚刚找到了获取自定义视图的高度和宽度的解决方案
  • SQLite中保存资源路径

    我需要将图像保存在 SQLite 数据库的资源文件夹中 该数据库是预加载的 复制到数据 路径 因此在运行时不会填充 我尝试将其保存在 SQLite 的文本字段中 R drawable picture1 我的drawable文件夹中有大约30
  • MySQL FULLTEXT 不适用于多个字段

    我有一个标准的 MySQL 全文查询 如下所示 SELECT FROM accounts WHERE MATCH first name username AGAINST stringhere 问题是 它找不到该字段的全文索引first na
  • 通过 jQuery 添加 JSF 标签/组件

    这是我所做的 var a document getElementById panelForm tableId01
  • NSIS 系统 kernel32::LoadLibrary 不搜索 Outdir 或 Path

    我正在尝试在 NSIS 安装程序中加载并调用 C 库 DLL 的函数 当我尝试加载 DLL 时 发出错误 126 ERROR MOD NOT FOUND 这是我用来测试的最小安装程序脚本 OutFile Main exe ShowInstD
  • 如何配置Json.NET自定义序列化?

    由于我无法控制的原因 我从外部服务返回的数据被格式化为字符串数组的数组 string one string two 我试图将其反序列化为具有两个属性的对象 public class MyObject public string Proper
  • ajax 调用导致错误而不是成功

    在我的 ASP net mvc3 项目中 我使用 ajax 调用将 json 数据发送到控制器公司中的创建操作方法 但是当我调试ajax调用时 它总是以错误结果而不是成功结果结束 阿贾克斯调用 ajax url Company Create
  • 在javascript中移动对象元素位置

    我正在尝试找到一种将对象元素移动到特定位置的方法 例如 我有这个对象 element1 object element2 element3 我搜索将 element3 移动到第一个位置 element3 element1 element2 感
  • 从 PDO 准备好的语句中获取原始 SQL 查询字符串

    在准备好的语句上调用 PDOStatement execute 时 有没有办法让原始 SQL 字符串执行 出于调试目的 这将非常有用 我假设您的意思是您想要最终的 SQL 查询 并将参数值插入其中 我知道这对于调试很有用 但这不是准备好的语
  • 如何为等待函数调用添加超时

    向等待函数添加超时的最佳方法是什么 Example lets pretend this is in a library that I m using and I can t mess with the guts of this thing
  • 按平均值排名的箱线图

    我想显示多个变量的箱线图 并按列均值降序排列它们 就像在绩效分析包裹 我使用以下代码生成箱线图 zx lt replicate 5 rnorm 50 zx means lt colMeans zx na rm TRUE boxplot zx
  • django 和 facebook:代表用户执行第三方登录的 facebook web 应用程序的安全性和设计

    我正在编写一个 Facebook 画布 Web 应用程序 它执行对第三方网站的登录 使用 urllib 并代表用户执行操作 这意味着我有2个账户 用户在我的网络应用程序中拥有的帐户 通过 facebook 以及应用程序用来代表他们执行登录的
  • Android Parcelable 对象返回 Null

    我有产品类 我想将产品对象从一项活动传递到另一项活动 我已经这样实现了 public class Product implements Parcelable private double availableQuantity private
  • 函数修改列表

    def make Ab A b n len A Ab list A for index in range 0 n Ab index append b index 0 print A return Ab copy A 0 0 1 0 1 0
  • VSCode 片段触发器之前有文本吗?

    我想在 VSCode 中创建一个显示 PHP 箭头的代码片段 当我按 键然后按 TAB 键时 我想要 PHP 箭头 gt 这是我的代码片段 PHP arrow prefix body gt 0 description PHP Arrow g
  • R - 将数据帧转换为格式为 featureName:featureValue [重复] 的数据集

    这个问题在这里已经有答案了 原来我想要的格式叫 SVM 轻 并在这里描述http svmlight joachims org 我有一个数据框 我想将其转换为格式如下的文本文件 output featureIndex featureValue
  • 无法在子进程命令中使用 grep

    我的子进程命令有问题 我喜欢 grep 出与 Online 行匹配的行 def run command command p subprocess Popen command shell False stdout subprocess PIP