2017-04-07 46 views
-1

我有一个配置文件,用户可以在其中指定一组shell命令。 命令基本上是一系列由管道分隔的shell命令。执行从Python中的文件读取为字符串的复杂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将是可以接受的。

+0

如果您了解子流程,为什么不尝试呢? https://docs.python.org/3/library/subprocess.html,https://stackoverflow.com/documentation/python/1393/subprocess-library#t=201704070552204503464 – Sundeep

+0

另外,您的管道看起来像是他们想要的改为小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

+0

@tripleee是的,它也可以有awk命令:grep“Something”$ {LOGFILE} | tail -1 | awk -F“=”'{print $ 3}' – VikramChopde

回答

2

使用subprocess.check_output()

output = subprocess.check_output(output) 

一个需要注意的是,不像其他的子命令,一个subprocess.CalledProcessError将如果返回非零的错误代码提高。


你不应该需要做的,但如果它有人就派上用场了那里,我没有碰上一次,其中由于某种原因,上述方案没有工作经验,等等,而不是,我做了以下。

stdout_fh = io.StringIO() 
    stderr_fh = io.StringIO() 
    with redirect_stderr(stderr_fh): 
     with redirect_stdout(stdout_fh): 
      subprocess.run(command, shell=True) 
    stderr = stderr_fh.getvalue() 
    stdout = stderr_fh.getvalue() 
相关问题