python - 子进程对上一条命令的结果执行 grep 处理
问题描述
我正在使用 python2.7 但使用子进程反向端口来允许创建CompletedProcess
python 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
关键字
任何帮助表示赞赏。
解决方案
推荐阅读
- java - 在 Liberty Server 上运行 spring-boot 应用程序
- c++ - 如何使用 XOR 加密字符串而不包含奇怪的字符?
- c# - 一段时间过去后,如何依次启用布尔值?
- javascript - 为什么 React Hooks 不更新数据
- bash - 将文件名缩短为 n 个字符,同时保留文件扩展名
- java - 如何启用点的坐标作为输入
- python - Python - 欧几里得距离不同大小的向量
- android - 如何在 kotlin 中使用改造来解析 xml 响应?
- php - 如何从数据库中获取值并将其放在 json_encoded 的 php 文件中的某个括号中?
- php - 如果在 Laravel 中找不到页面,则为 404 页