1

显然是我的问题“我可以将鼻子覆盖输出限制到目录(而不是包)吗?”的答案。不是,但我可以通过一个--coverage-package=PACKAGE选项来使用目录中每个 .py 文件的包名。

例如,如果目录包含:

foo.py
bar.py
baz.py

...然后我需要使用命令:

nosetests --with-coverage --coverage-package=foo --coverage-package=bar --coverage-package=baz

所以我的问题是,有人可以编写一些 shell 脚本代码(最好是 sh 或 bash)来获取当前目录中带有 .py 扩展名的所有文件名并生成上述命令行(删除 .py 扩展名)?我的 bash 技能非常有限。(我很想只用 Python 来做。)

4

3 回答 3

13
nosetests --with-coverage $(for f in *.py; do echo --cover-package="${f%.*}"; done)

这里的诀窍是使用参数替换来删除文件扩展名。

${f%.*}
于 2009-05-12T23:00:58.903 回答
3

如果你想正确地做到这一点(这意味着,不要允许分词将你的文件名分开或意外的通配符扩展到随机文件名),请使用数组:

files=(*.py)
packages=("${files[@]/%.py/}")
nosetests --with-coverage "${packages[@]/#/--coverage-package=}"
于 2009-05-13T07:16:46.423 回答
2
nosetests --with-coverage `ls *.py|sed -e 's/^/--cover-package=' -e 's/\.py$//'`
于 2009-05-12T23:01:59.773 回答