首页 > 解决方案 > 子进程对上一条命令的结果执行 grep 处理

问题描述

我正在使用 python2.7 但使用子进程反向端口来允许创建CompletedProcesspython 3 版本库的功能。

class CompletedProcess:

    def __init__(self, args, returncode, stdout=None, stderr=None):
        self.args = args
        self.returncode = returncode
        self.stdout = stdout
        self.stderr = stderr

    def check_returncode(self):
        if self.returncode != 0:
            err = subprocess.CalledProcessError(self.returncode, self.args, output=self.stdout)
            raise err
        return self.returncode

def sp_run(*popenargs, **kwargs):
    input = kwargs.pop("input", None)
    check = kwargs.pop("handle", False)
    if input is not None:
        if 'stdin' in kwargs:
            raise ValueError('stdin and input arguments may not both be used.')
        kwargs['stdin'] = subprocess.PIPE
    process = subprocess.Popen(*popenargs, **kwargs)
    try:
        outs, errs = process.communicate(input)
    except:
        process.kill()
        process.wait()
        raise
    returncode = process.poll()
    if check and returncode:
        raise subprocess.CalledProcessError(returncode, popenargs, output=outs)
    return CompletedProcess(popenargs, returncode, stdout=outs, stderr=errs)

subprocess.run = sp_run

我正在尝试运行此命令:

lspci -n | egrep -i "8086:1565|8086:10ca" | awk '{print $1}'

您可以看到它由三个单独的命令组成。所以我需要将它们链接在一起。我在这里完成了前两个:

cardQuery = subprocess.run(['lspci', '-n'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
validCards = subprocess.run(['egrep', '-i', '"8086:1565|8086:10ca"'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, input=cardQuery.stdout)

但是当我打印validCards.stdout时,我应该得到的却没有得到输出

01:10.0 0200: 8086:1565
01:10.1 0200: 8086:1565
01:10.2 0200: 8086:1565
01:10.3 0200: 8086:1565
01:10.4 0200: 8086:1565
01:10.5 0200: 8086:1565
01:10.6 0200: 8086:1565
01:10.7 0200: 8086:1565
01:11.0 0200: 8086:1565
01:11.1 0200: 8086:1565
01:11.2 0200: 8086:1565
01:11.3 0200: 8086:1565
01:11.4 0200: 8086:1565
01:11.5 0200: 8086:1565
01:11.6 0200: 8086:1565
01:11.7 0200: 8086:1565

我相信在命令之间传递信息的正确方法是input关键字

任何帮助表示赞赏。

标签: pythonsubprocesspython-2.x

解决方案


推荐阅读