[英]python subprocess.check_output() json parameter parsing in ubuntu container
嘗試在 ubuntu 20.04 容器中使用 subprocess.check_output() 執行代碼:
try:
out = subprocess.check_output(exe)
except subprocess.CalledProcessError as e:
log.error(f"unable to execute:{' '.join(exe)} -> {e} -> {out}")
return None
0211022170027|INFO|command used: ./bin/elkq.py --env=test --vertical=trk --index='bps-trace-*'
--testenv=test12 --fields=@timestamp,message,bps.application --aggs=bps.application --start=now-4h
--end=now --json --fany='("error")' --fmust='[{"fields.buypass.com/name": "id-pro-_VERT_-*"},
{"bps.application": "*-_TESTENV_"}]'
20211022170028|ERROR|unable to execute:./bin/elkq.py --env=test --vertical=trk --index='bps-trace-*'
--testenv=test12 --fields=@timestamp,message,bps.application --aggs=bps.application --start=now-4h
--end=now --json --fany='("error")' --fmust='[{"fields.buypass.com/name": "id-pro-_VERT_-*"},
{"bps.application": "*-_TESTENV_"}]' ->
Command '['./bin/elkq.py', '--env=test', '--vertical=trk', "--index='bps-trace-*'",
'--testenv=test12', '--fields=@timestamp,message,bps.application', '--aggs=bps.application',
'--start=now-4h', '--end=now', '--json', '--fany=\'("error")\'',
'--fmust=\'[{"fields.buypass.com/name": "id-pro-_VERT_-*"}, {"bps.application": "*-_TESTENV_"}]\'']'
returned non-zero exit status 255. -> None
但是如果我直接從上面的命令 use 行剪切並粘貼命令在同一個容器中它工作正常,所以我假設錯誤在子進程環境中:
(base) root@deabf77921e8:/ # ./bin/elkq.py --env=test --vertical=trk --index='bps-trace-*' \
--testenv=test12 --fields=@timestamp,message,bps.application --aggs=bps.application --start=now-4h \
--end=now --json --fany='("error")' \
--fmust='[{"fields.buypass.com/name": "id-pro-_VERT_-*"}, {"bps.application": "*-_TESTENV_"}]'
{
"aggregations": {
"bps.application": {
"buckets": [
{
"doc_count": 15,
"key": "id-pro-trk-trk-scim-api-test12"
},
{
"doc_count": 1,
"key": "id-pro-trk-trk-freg-gateway-test12"
},
{
"doc_count": 1,
"key": "id-pro-trk-trk-id-proofing-web-test12"
}
],
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0
}
},
"count": "max count found:17 rows in 0.05 sec"
}
(base) root@deabf77921e8:/ # echo $?
0
我知道它與 --fmust 參數有關,因為如果我忽略它,它會起作用,而且我之前通過 argparse 使用默認參數解決了它:
r'[{"fields.buypass.com/name": "id-pro-_VERT_-*"}, {"bps.application": "*-_TESTENV_"}]'
在 powershell 中,它只需雙引號"
到""
但 CI 運行 linux 容器。
非常感謝有關調試的任何幫助,謝謝
我將 subprocess.check_output() 更改為在 linux 上使用shell=True
,這可能是一個骯臟的解決方法,但現在它可以在帶有 json 參數的 powershell 和 bash 中使用:
shell = True
if sys.platform != 'win32':
exe = ' '.join(exe)
shell = False
try:
out = subprocess.check_output(exe, shell=shell)
except subprocess.CalledProcessError as e:
log.error(f"unable to execute:{exe} -> {e} -> {out}")
return None
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.