2017-04-07 48 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() 
相關問題