1 回答

TA貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超6個(gè)贊
直接和狹隘的問題是subprocess.call()返回退出狀態(tài)(0如果grep沒有失敗,或者失敗1了),而不是輸出。這可以通過使用check_output()來解決:
version = subprocess.check_output(
"ansible --version | awk '/ansible [0-9].[0-9].[0-9]/ { print $2; exit }'", shell=True
).strip().decode('utf-8')
如果您想避免shell=True(值得稱贊,但在您當(dāng)前的用例中實(shí)際上并不是直接的安全問題),這可能如下所示:
import re
av = subprocess.check_output(['ansible', '--version'])
match = re.match('^ansible (\d+[.]\d+[.]\d+)$', av.split(b'\n')[0].decode('utf-8'))
if match is None:
raise Exception("Unable to get version number from ansible")
version = match.group(1)
添加回答
舉報(bào)