python grep模块_Python中的grep库输出

我对您的程序到底在做什么有点困惑,但听起来好像您有一个C库写入Cstdout(不是Pythonsys.stdout),您希望捕获这个输出并对其进行后处理,而且您已经为C库提供了一个Python绑定,您希望使用它而不是单独使用它C程序。在

首先,您必须使用子进程来执行此操作;其他任何方法都无法可靠地工作。这是因为stdout是进程全局的,因此没有可靠的方法来捕获只有一个线程对stdout的写入。在

其次,您可以使用subprocess.Popen,因为您可以使用它重新调用当前脚本!这就是Python multiprocessing模块在幕后所做的事情,而且自己动手并不难。我将使用一个特殊的、隐藏的命令行参数来区分子对象,如下所示:import argparse

import subprocess

import sys

def subprocess_call_c_lib():

import c_lib

c_lib.do_stuff()

def invoke_c_lib():

proc = subprocess.Popen([sys.executable, __file__,

" internal-subprocess-call-c-lib"

# , ...

],

stdin=subprocess.DEVNULL,

stdout=subprocess.PIPE)

for line in proc.stdout:

# filter output from the library here

# to display to "screen", write to sys.stdout as usual

if proc.wait():

raise subprocess.CalledProcessError(proc.returncode, "c_lib")

def main():

ap = argparse.Parser(...)

ap.add_argument(" internal-subprocess-call-c-lib", action="store_true",

help=argparse.SUPPRESS)

# ... more arguments ...

args = ap.parse_args()

if args.internal_subprocess_call_c_lib:

subprocess_call_c_lib()

sys.exit(0)

# otherwise, proceed as before ...

main()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值