Кавычки внутри скрипта bash для pytest - PullRequest
0 голосов
/ 08 октября 2018

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

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

Вот как MWE:

Содержимое test.sh

#!/bin/bash

options=("-v")
options+=("-m \"not dummy\"")

echo "about to launch pytest ${options[@]}"
pytest ${options[@]}

Содержимое test_dummy.py:

import pytest

@pytest.mark.dummy
def test_dummy():
    assert(True)

Теперь вывод работающего сценария test.sh:

собирается запустить pytest -v -m "not dummy" =============================================================================================================================== начинается тестовая сессия ==================================================================================================================================== платформа Linux - Python 3.6.4, pytest-3.3.2, py-1.5.2, pluggy-0.6.0 - /home/[...]/anaconda3/bin/python cachedir: .cache rootdir: /home/[...]/pytest, inifile: плагины: cov-2.5.1

========================================================================================================================= тесты не выполнялись в течение 0,00 секунд =========================================================================================================================== ОШИБКА: файл не найден: пустышка "

Конечно, запуск сгенерированной команды

pytest -v -m"не пустышка"

Работает отлично.Как преодолеть эту проблему

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 08 октября 2018

Не уверен, но я думаю, что ваша проблема заключается в определении двух аргументов как одного.Попробуйте разделить все аргументы:

#!/bin/bash

options=("-v")
options+=("-m" "not dummy")

echo "about to launch pytest ${options[@]}"
pytest "${options[@]}"
0 голосов
/ 08 октября 2018

На самом деле, найден способ решения этой проблемы.По-видимому, самое простое решение - «преобразовать» всю команду в виде строки и сделать eval для ее оценки.

Я заменил последнюю строку

pytest $ {options [@]}

от

eval pytest $ {options [@]}

...