pytest bash 脚本中的引号
Quotation marks inside bash script for pytest
我尝试编写一个脚本来帮助根据用户输入选择 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 脚本的输出:
about to launch pytest -v -m "not dummy"
=============================================================================================================================== test session starts
=============================================================================================================================== platform 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: plugins:
cov-2.5.1
========================================================================================================================== no tests ran in 0.00 seconds
=========================================================================================================================== ERROR: file not found: dummy"
当然运行生成的命令
pytest -v -m "not dummy"
完美运行。如何克服这个问题
提前致谢
实际上,找到了解决这个问题的方法。显然,最简单的解决方案是 "recast" 将整个命令作为一个字符串,然后使用 eval 对其进行评估。
我替换了最后一行
pytest ${options[@]}
来自
eval pytest ${options[@]}
不确定,但我认为您的问题来自于将两个参数定义为一个参数。尝试将所有参数分开:
#!/bin/bash
options=("-v")
options+=("-m" "not dummy")
echo "about to launch pytest ${options[@]}"
pytest "${options[@]}"
我尝试编写一个脚本来帮助根据用户输入选择 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 脚本的输出:
about to launch pytest -v -m "not dummy" =============================================================================================================================== test session starts =============================================================================================================================== platform 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: plugins: cov-2.5.1
========================================================================================================================== no tests ran in 0.00 seconds =========================================================================================================================== ERROR: file not found: dummy"
当然运行生成的命令
pytest -v -m "not dummy"
完美运行。如何克服这个问题
提前致谢
实际上,找到了解决这个问题的方法。显然,最简单的解决方案是 "recast" 将整个命令作为一个字符串,然后使用 eval 对其进行评估。
我替换了最后一行
pytest ${options[@]}
来自
eval pytest ${options[@]}
不确定,但我认为您的问题来自于将两个参数定义为一个参数。尝试将所有参数分开:
#!/bin/bash
options=("-v")
options+=("-m" "not dummy")
echo "about to launch pytest ${options[@]}"
pytest "${options[@]}"