如何为通过标准输入管道传递给Python解释器的脚本传递参数?
给get-poetry.py传递指定版本参数的正确方法
我完全懂你遇到的这个问题——当你用管道把curl拉取的get-poetry.py脚本传给Python执行时,直接在python后面加--version 1.1.4,这些参数会被Python解释器当成自己的命令(比如python --version本来就是查Python版本的),根本没传递给目标脚本。而且你不想把脚本存到Docker镜像里再执行,避免额外的文件清理步骤,这很合理。
这里有两个简洁可靠的解决办法:
方法一:用Python的-c参数执行脚本并传递参数
这个方法通过Python的-c选项读取标准输入的脚本内容,同时把版本参数明确传给脚本。命令如下:
GET_POETRY_URL=https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py curl -sSL $GET_POETRY_URL | python -c "import sys; exec(sys.stdin.read())" --version 1.1.4
这里的关键是,--version 1.1.4放在了python -c "..."的后面,会被当成脚本的命令行参数,而不是Python解释器的参数。
方法二:用--分隔Python参数和脚本参数
另一种更直观的方式是用--告诉Python:“后面的所有参数都传给脚本,别自己处理”。命令如下:
GET_POETRY_URL=https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py curl -sSL $GET_POETRY_URL | python -- --version 1.1.4
这个--是Unix命令行的通用约定,用来区分程序自身的选项和要传递给子命令/脚本的参数,非常好用。
这两种方法都不需要保存脚本到本地,完全符合你在Docker里的无文件残留需求。
内容的提问来源于stack exchange,提问作者Blaine Rogers
相关产品推荐
相关产品推荐

