Хотите проанализировать JSON в сценарии bash, но получите сообщение об ошибке "python: невозможно выполнить двоичный файл" - PullRequest
0 голосов
/ 05 марта 2020

Я пытаюсь написать сценарий оболочки, где я анализирую некоторые JSON. В частности, я хочу извлечь значение элемента "id". У меня есть ниже (у меня установлена ​​Python 3 в моей системе) ...

user_json=$(curl --header "Content-type: application/json" -H "Authorization: Bearer $json_token" --data "$req" --request POST "$URL/mypath")
echo $user_json
user_id=$(echo $user_json | python -c 'import json,sys;obj=json.load(sys.stdin);print(obj["id"])')
echo $user_id

Однако приведенное выше приводит к

/opt/scripts/sync_script.sh: line 36: /usr/local/Cellar/python/3.7.3/Frameworks/Python.framework/Versions/3.7/python: cannot execute binary file

на "python" строка (переменная $ user_id никогда не печатается). Что еще мне нужно сделать, чтобы это работало? Когда распечатывается $ user_ json, я ясно вижу значение "id" ...

{"id":"4b8d53a5-d0b5-4175-82ec-8aeda435ba62","first_name":"ddd"}

Редактировать: В ответ на комментарии я получаю следующую ошибку при попытке увидеть версию моего Python. Разрешения также включены.

localhost:tmp davea$ /usr/local/Cellar/python/3.7.3/Frameworks/Python.framework/Versions/3.7/python -version
-bash: /usr/local/Cellar/python/3.7.3/Frameworks/Python.framework/Versions/3.7/python: cannot execute binary file
localhost:tmp davea$ ls -al /usr/local/Cellar/python/3.7.3/Frameworks/Python.framework/Versions/3.7/python
-rwxr-xr-x 1 davea admin 2382880 Apr 16  2019 /usr/local/Cellar/python/3.7.3/Frameworks/Python.framework/Versions/3.7/python

1 Ответ

1 голос
/ 05 марта 2020

Вы пытались использовать утилиту python -m | json .tool или jq [.] В bash я просто сделал бы что-то подобное,

curl --header "Content-type: application/json" -H "Authorization: Bearer $json_token" --data "$req" --request POST "$URL/mypath" | python -m json.tool

или

curl --header "Content-type: application/json" -H "Authorization: Bearer $json_token" --data "$req" --request POST "$URL/mypath" |jq [.]

А также убедитесь, что python настроен правильно в вашем env $ PATH

...