python - 如何从 python 代码执行 pylint 命令。pylint 中的哪些参数可以根据我的需要生成日志消息
问题描述
当我想pylint
使用 Python 文件运行命令时,我有一个场景。使用我正在使用的命令提示符
python3 -m pylint test.py
除此之外,我想格式化我的消息,以便我以后可以使用 split 方法来分隔参数并像 excel 一样输入报告。还要用更有意义的名称替换 C0103 之类的代码。我从命令提示符尝试了以下命令,但无法得到正确的答案
python3 -m pylint --msg-template="{module}{obj}{line}{column}{msg}" init.py
代码
# all of the following are equivalent
my_string = 'Hello'
print(my_string)
my_string = "Hello"
print(my_string)
my_string = '''Hello'''
print(my_string)
# triple quotes string can extend multiple lines
my_string = """Hello, welcome to
the world of Python"""
print(my_string)
输出
python3 -m pylint init.py
************* Module init
init.py:14:0: C0304: Final newline missing (missing-final-newline)
init.py:1:0: C0114: Missing module docstring (missing-module-docstring)
init.py:2:0: C0103: Constant name "my_string" doesn't conform to UPPER_CASE naming style (invalid-name)
init.py:5:0: C0103: Constant name "my_string" doesn't conform to UPPER_CASE naming style (invalid-name)
init.py:8:0: C0103: Constant name "my_string" doesn't conform to UPPER_CASE naming style (invalid-name)
init.py:12:0: C0103: Constant name "my_string" doesn't conform to UPPER_CASE naming style (invalid-name)
-------------------------------------------------------------------
Your code has been rated at 2.50/10 (previous run: -1.39/10, +3.89)
解决方案
除此之外,我想格式化我的消息,以便我以后可以使用 split 方法来分隔参数并像 excel 一样输入报告。
python3 -m pylint --msg-template="{module}{obj}{line}{column}{msg}" init.py
您是否考虑过在消息模板中放置分隔符?
因为在这里您只是将所有项目混在一起,这似乎不是很有帮助或有用,但也不难补救:
$ python3 -m pylint --msg-template="{module}{obj}{line}{column}{msg}" test.py
************* Module test
test10Missing module docstring
test20Constant name "my_string" doesn't conform to UPPER_CASE naming style
------------------------------------------------------------------
Your code has been rated at 0.00/10 (previous run: 0.00/10, +0.00)
$ python3 -m pylint --msg-template="{module}|{obj}|{line}|{column}|{msg}" test.py
************* Module test
test||1|0|Missing module docstring
test||2|0|Constant name "my_string" doesn't conform to UPPER_CASE naming style
------------------------------------------------------------------
Your code has been rated at 0.00/10 (previous run: 0.00/10, +0.00)
尽管-f
如果您想以编程方式使用输出,该参数可能更有用。pylint -f json
例如,会将所有诊断信息转储为具有良好命名属性的 json 对象数组。
还要用更有意义的名称替换 C0103 之类的代码。我从命令提示符尝试了以下命令,但无法得到正确的答案
从文档中,您想要的模板项是symbol
“消息的符号名称”:
$ pylint test.py
************* Module test
test.py:1:0: C0114: Missing module docstring (missing-module-docstring)
test.py:2:0: C0103: Constant name "my_string" doesn't conform to UPPER_CASE naming style (invalid-name)
------------------------------------------------------------------
Your code has been rated at 0.00/10 (previous run: 4.29/10, -4.29)
$ pylint --msg-template='{msg_id}' test.py
************* Module test
C0114
C0103
------------------------------------------------------------------
Your code has been rated at 0.00/10 (previous run: 0.00/10, +0.00)
$ pylint --msg-template='{symbol}' test.py
************* Module test
missing-module-docstring
invalid-name
------------------------------------------------------------------
Your code has been rated at 0.00/10 (previous run: 0.00/10, +0.00)
当我想使用 Python 文件运行 pylint 命令时,我有一个场景。
使用 subprocess 运行 pylint 可能是最简单且最受支持的方法。您可以手动配置和运行pylint.lint.PyLinter
,但据我所知,它是无证的、不受支持的,绝对令人头疼,并且容易摔倒(因为 pylint 崩溃——这很常见——这将取消整个脚本)。我们以前在 $dayjob 中这样做,然后回到在子进程中运行 CLI,它更可靠。
推荐阅读
- ruby-on-rails - 如何修复“未定义的方法 total_pages”
- c# - 并行读取 Azure blob 文件的最快方法
- excel - 如何从另一个excel表中的给定引用中减去值
- python-3.x - 有什么方法可以改善笛卡尔虹膜图像中瞳孔区域的轮廓检测?
- python-3.x - 在 Python 中将多个文本文件读取到 2D numpy 数组
- reactjs - 如何使用 Context API 访问状态
- laravel - 为什么 Route::resource() 在删除/更新控制器中某些方法的名称后不更新路由
- java - 如何使用线程池在非 GUI 线程中运行任务
- node.js - 使用套接字连接到节点服务器时出错
- python - 如何修复'用户输入(“用户:”)语法错误'