Как мне передать аргументы скрипту, переданному интерпретатору Python на стандартном интерфейсе?

#python #pipe #command-line-arguments

#python #канал #аргументы командной строки

Вопрос:

Я устанавливаю poetry с помощью get-poetry.py скрипта и хочу указать версию для установки. Чтобы установить последнюю версию, я делаю

 GET_POETRY_URL=https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py
curl -sSL $GET_POETRY_URL | python
 

get-poetry.py Скрипт принимает аргумент --version , но как мне его передать?

 curl -sSL $GET_POETRY_URL | python --version 1.1.4
 

печатает установленную версию python, а не передает аргумент get-poetry.py скрипту. Я мог бы сохранить скрипт в файл и вызвать его таким образом, но я делаю это в образе docker, и я не хочу иметь дело с его очисткой впоследствии.

Ответ №1:

 curl -sSL $GET_POETRY_URL | python - --version 1.1.4
 

Использование - в качестве местоположения скрипта при вызове python приведет к чтению из стандартного интерфейса. Как обычно, любые аргументы после расположения скрипта передаются сценарию:

 $ echo "import sys; print(sys.argv)" | python - --version 1.1.4
['-', '--version', '1.1.4']
 

Использование - для обозначения stdin также работает для многих других инструментов unix:

 $ echo hello | cat -
hello