如何通过 tox 将 *.py 传递给 pycco?
How can I pass *.py to pycco via tox?
以下命令有效:
$ pycco *.py
# generates literate-style documentation
# for all .py files in the current folder
我的 tox.ini 文件中的以下片段按预期工作:
[testenv:pycco]
deps =
pycco
commands =
pycco manage.py
# generates literate-style documentation
# for manage.py
但如果我尝试使用 glob:
[testenv:pycco]
deps =
pycco
commands =
pycco *.py
...我收到以下错误:
File "/home/user/Documents/project/.tox/pycco/lib/python3.7/site-packages/pycco/main.py", line 79, in generate_documentation
code = open(source, "rb").read().decode(encoding)
FileNotFoundError: [Errno 2] No such file or directory: '*.py'
如何通过 tox 将 *.py
传递给 pycco?
您不能直接执行此操作,因为 pycco(当前)不支持 glob 扩展。相反,您可以创建一个 shell 脚本 execute_pycco.sh
,如下所示:
#!/bin/sh
pycco *.py
更新tox.ini
如下:
[testenv:pycco]
deps =
pycco
commands =
./execute_pycco.sh
您现在将在 tox 创建的 "pycco" 环境中执行您的 shell 脚本。此方法还允许您定义更复杂的脚本:
#!/bin/sh
filelist=$( find . -name '*.py' | grep -v ".tox" )
# make a list of all .py files in all subfolders,
# except the .tox/ subfolder
pycco -ip $filelist
# generate literate-style documentation for all
# files in the list
这里的问题是pycco不支持glob扩展。 pycco *.py
之所以起作用,是因为在执行之前 shell 实际上将 *.py
转换为实际文件;然后将其传递给 OS 到 运行 它。
当 tox 运行s 你的命令没有 shell 涉及,所以无论你写什么都传递给 OS,所以现在 pycco 实际上作为参数 *.py
因此错误。
您可以通过显式列出文件路径或使用 python 解释器进行扩展来解决此问题:
python -c 'from glob import glob; import subprocess; subprocess.check_call(["pycco"] + glob("*.py"))'
将上述命令放入您的 tox 命令中,现在一切正常,因为 python 现在是 shell 将“*.py”扩展到实际文件列表。
以下命令有效:
$ pycco *.py
# generates literate-style documentation
# for all .py files in the current folder
我的 tox.ini 文件中的以下片段按预期工作:
[testenv:pycco]
deps =
pycco
commands =
pycco manage.py
# generates literate-style documentation
# for manage.py
但如果我尝试使用 glob:
[testenv:pycco]
deps =
pycco
commands =
pycco *.py
...我收到以下错误:
File "/home/user/Documents/project/.tox/pycco/lib/python3.7/site-packages/pycco/main.py", line 79, in generate_documentation
code = open(source, "rb").read().decode(encoding)
FileNotFoundError: [Errno 2] No such file or directory: '*.py'
如何通过 tox 将 *.py
传递给 pycco?
您不能直接执行此操作,因为 pycco(当前)不支持 glob 扩展。相反,您可以创建一个 shell 脚本 execute_pycco.sh
,如下所示:
#!/bin/sh
pycco *.py
更新tox.ini
如下:
[testenv:pycco]
deps =
pycco
commands =
./execute_pycco.sh
您现在将在 tox 创建的 "pycco" 环境中执行您的 shell 脚本。此方法还允许您定义更复杂的脚本:
#!/bin/sh
filelist=$( find . -name '*.py' | grep -v ".tox" )
# make a list of all .py files in all subfolders,
# except the .tox/ subfolder
pycco -ip $filelist
# generate literate-style documentation for all
# files in the list
这里的问题是pycco不支持glob扩展。 pycco *.py
之所以起作用,是因为在执行之前 shell 实际上将 *.py
转换为实际文件;然后将其传递给 OS 到 运行 它。
当 tox 运行s 你的命令没有 shell 涉及,所以无论你写什么都传递给 OS,所以现在 pycco 实际上作为参数 *.py
因此错误。
您可以通过显式列出文件路径或使用 python 解释器进行扩展来解决此问题:
python -c 'from glob import glob; import subprocess; subprocess.check_call(["pycco"] + glob("*.py"))'
将上述命令放入您的 tox 命令中,现在一切正常,因为 python 现在是 shell 将“*.py”扩展到实际文件列表。