如何获取使用Python在Shell中执行的命令和参数

问题描述

我正在aws-cli中运行命令以获取日志,并且需要使用此命令的输出在python中执行一些操作。

我正在做这样的事情:


aws logs filter-log-events --log-group-name "something" --log-stream-names my-log-stream --filter-pattern "status=FAIL" | python3 -c "import sys,json; print(json.load(sys.stdin))" 

上面的命令获取aws日志并运行python代码段以打印返回的json。

我想访问python代码段中的log-group-namelog-stream-name,即“ something”和“ my-log-stream”(在这种情况下)。我不确定该怎么做。

我尝试使用sys.argv,但它会返回python命令中传递的参数,即['-c'],而不是aws命令。

解决方法

这不是管道的工作方式。它只是将命令的输出发送到下一个命令。您可以将log-group-namelog-stream-name设置为环境变量

export LGN=something
...

然后使用os.environ["LGN"]在python中访问它...类似于

export LGN="my-log-group"; <your code here> | python3 -c "import os; print(os.environ['LGN'])"