【发布时间】:2020-03-09 15:55:13
【问题描述】:
我正在使用 tox-docker 并将 POSTGRES_5432_TCP_PORT 设置为环境变量。如何再次访问此环境变量?我想这样做是因为我必须将它提供给 pytest 命令。
[tox]
skipsdist = True
envlist = py37-django22
[testenv]
docker = postgres:9
dockerenv =
POSTGRES_USER=asd
POSTGRES_DB=asd
POSTGRES_PASSWORD=asd
setenv =
PYTHONDONTWRITEBYTECODE=1
DJANGO_SETTINGS_MODULE=app.settings.base
deps=-rrequirements.txt
-rrequirements_dev.txt
commands =
env
python -c "print('qweqwe', {env:POSTGRES_5432_TCP_PORT:'default_port'})"
pytest -sv --postgresql-port={env:POSTGRES_5432_TCP_PORT:} --cov-report html --cov-report term --cov=app -l --tb=long {posargs} --junitxml=junit/test-results.xml
这里,POSTGRES_5432_TCP_PORT 由 tox-docker 设置。但是当我尝试在 tox 中访问它时,它不可用。但是当我在 tox 中执行 env 命令时,它会打印变量。
py37-django22 docker: run 'postgres:9'
py37-django22 run-test-pre: PYTHONHASHSEED='480168593'
py37-django22 run-test: commands[0] | env
PATH=
TOX_WORK_DIR=src/.tox
HTTPS_PROXY=http://0000:8000
LANG=C
HTTP_PROXY=http://0000:8000
PYTHONDONTWRITEBYTECODE=1
DJANGO_SETTINGS_MODULE=app.settings.base
PYTHONHASHSEED=480168593
TOX_ENV_NAME=py37-django22
TOX_ENV_DIR=/.tox/py37-django22
POSTGRES_USER=swordfish
POSTGRES_DB=swordfish
POSTGRES_PASSWORD=swordfish
POSTGRES_HOST=172.17.0.1
POSTGRES_5432_TCP_PORT=32822
POSTGRES_5432_TCP=32822
VIRTUAL_ENV=.tox/py37-django22
py37-django22 run-test: commands[1] | python -c 'print('"'"'qweqwe'"'"', '"'"'default_port'"'"')'
qweqwe default_port
py37-django22 run-test: commands[2] | pytest -sv --postgresql-port= --cov-report html --cov-report term --cov=app -l --tb=long --junitxml=junit/test-results.xml
【问题讨论】:
-
欢迎使用 Groot221 :) 您可能希望在标签中添加“shell”以获得更多可见性。
-
如果你有以下命令,结果会怎样?
python -c "import os; print('qweqwe', os.environ['POSTGRES_5432_TCP_PORT'])"和pytest -sv --postgresql-port=${POSTGRES_5432_TCP_PORT} -
Hi @sinoroc '''python -c "import os; print('qweqwe', os.environ['POSTGRES_5432_TCP_PORT'])" ''' 提供正确的输出,但又是 '''pytest -sv --postgresql-port=${POSTGRES_5432_TCP_PORT}''' 失败。我刚刚以这种方式在 setenv 部分中分配了我的应用程序使用的变量 - '''APP_DB_PORT=$POSTGRES_5432_TCP_PORT ''' 我的应用程序直接获取端口号。我从命令中删除了 --postgresql-port 标志。
-
我想它应该可以工作。也许使用
passenvconfiguration option 会有所帮助。