【发布时间】:2017-04-07 05:46:40
【问题描述】:
我有一个配置文件,用户可以在其中指定一组 shell 命令。 命令基本上是一系列以管道分隔的 shell 命令。
CMD1 = grep "SomeOtherString" | grep "XX" | cut -d":" -f9 | cut -d"," -f1
CMD2 = grep "SomeOtherString" | tail -1| cut -d":" -f9 | cut -d"," -f1 | cut -d"[" -f2 | cut -d"]" -f1
我能够阅读我的 Python 脚本中的命令。我的问题是如何在 Python 中运行这些读取命令字符串并获得输出。
任何带有subprocess、plumbum、sh 的解决方案都可以接受。
【问题讨论】:
-
顺便说一句,您的管道看起来像是想要成为小型 Awk 脚本。
CMD1 = awk -F: '/SomeOtherString/ && /XX/ { s=$9; sub(/,.*/, "", s); print s }'和CMD2 = awk -F: '/SomeOtherString { s=$9; sub(/][^],]*,.*/, "", s); sub(/^[^[]*\[/, "", s); } END { print s }' -
@tripleee 是的,它也可以有 awk 命令:grep "Something" ${LOGFILE}|tail -1|awk -F"=" '{ print $3 }'
-
我的意思是,您的脚本可能应该完全用 Awk 编写,或者至少主要用 Awk 编写。一旦管道中有两个或三个以上的
grep和cut和tail命令,您应该开始思考。当然,你最新的例子写得更好awk -F= '/Something/ { s=$3 } END { print s }' "$LOGFILE" -
谢谢 .. 如果我将命令链作为字符串传递给 python 子进程,我们将更倾向于知道会发生什么问题
标签: python bash shell subprocess plumbum