我尝试编写一个脚本,该脚本有助于根据用户输入选择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“非虚拟”
完美运行。如何克服这个问题
提前谢谢
答案 0 :(得分:5)
不确定,但是我认为您的问题来自将两个参数定义为一个参数。尝试将所有参数分隔开:
#!/bin/bash
options=("-v")
options+=("-m" "not dummy")
echo "about to launch pytest ${options[@]}"
pytest "${options[@]}"
答案 1 :(得分:-2)
实际上,找到了解决此问题的方法。显然,最简单的解决方案是将整个命令“重铸”为字符串,并进行评估以评估它。
我替换了最后一行
pytest $ {options [@]}
作者
评估pytest $ {options [@]}