如何从python代码执行pylint命令。根据我的需要,pylint中的哪个参数可以生成日志消息

如何从python代码执行pylint命令。根据我的需要,pylint中的哪个参数可以生成日志消息,python,pylint,Python,Pylint,我有一个场景,我想使用Python文件运行pylint命令。 使用我正在使用的命令提示符 python3 -m pylint test.py 除此之外,我还想格式化我的消息,以便以后可以使用split方法来分离参数,并像excel一样输入报告。还可以用更有意义的名称替换代码C0103。 我从命令提示符下尝试了下面的命令,但无法得到正确的答案 python3 -m pylint --msg-template="{module}{obj}{line}{column}{msg}" init.py

我有一个场景,我想使用Python文件运行
pylint
命令。 使用我正在使用的命令提示符

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
*************模块测试
test10缺失模块docstring
Test20常量名称“my_string”不符合大写字母命名样式
------------------------------------------------------------------
您的代码评级为0.00/10(上一次运行:0.00/10,+0.00)
$python3-m pylint--msg template=“{module}{obj}}{line}{124;{column}{msg}”test.py
*************模块测试
测试| | 1 | 0 |缺少模块docstring
测试| | 2 | 0 |常量名称“my|u string”不符合大写字母命名样式
------------------------------------------------------------------
您的代码评级为0.00/10(上一次运行:0.00/10,+0.00)
虽然如果您希望以编程方式使用输出,
-f
参数可能更有用
pylint-fjson
将把所有诊断转储为一个json对象数组,例如,具有良好命名的属性

还可以用更有意义的名称替换代码C0103。我从命令提示符下尝试了下面的命令,但无法得到正确的答案

python3 -m pylint --msg-template="{module}{obj}{line}{column}{msg}" init.py
从文档中,您需要的模板项是
symbol
,即“消息的符号名”:

$pylint test.py
*************模块测试
test.py:1:0:C0114:缺少模块docstring(缺少模块docstring)
test.py:2:0:C0103:常量名称“我的字符串”不符合大写命名样式(名称无效)
------------------------------------------------------------------
您的代码评级为0.00/10(上一次运行:4.29/10,-4.29)
$pylint--msg template='{msg_id}'test.py
*************模块测试
C0114
C0103
------------------------------------------------------------------
您的代码评级为0.00/10(上一次运行:0.00/10,+0.00)
$pylint--msg template='{symbol}'test.py
*************模块测试
缺少模块docstring
无效名称
------------------------------------------------------------------
您的代码评级为0.00/10(上一次运行:0.00/10,+0.00)
我有一个场景,当我想使用Python文件运行pylint命令时


使用子流程运行pylint可能是最简单、最受支持的方法。您可以手动配置并运行
pylint.lint.PyLinter
,但据我所知,它没有文档记录,不受支持,非常麻烦,而且容易崩溃(因为pylint中的崩溃——这是很常见的——会毁掉整个脚本)。我们以前在$dayjob时就是这样做的,然后又回到在子流程中运行CLI,这样更可靠。

我使用pylint的一种方法是,无论我有什么输出日志,都有一个分隔符,可以存储在.txt文件中

除此之外,我还通过Python脚本运行了这个脚本。 在这里,将要针对其运行Pylint的脚本放入
script\u name

import os    
script_name = <source_script>     #example test.py
output_file = <output_pylint_txt> #example test.txt

param1 = 'python -m pylint --max-line-length=400 -d relative-beyond-top-level,wildcard-import --msg-template="{abspath}||{path}||{symbol}||{msg_id}||{line}||{column}||{msg}" --reports=y '+ script_name

 param2 = ' > '+output_file
 param = param1 + param2
 os.system(param)   # this will execute final command on command prompt
导入操作系统
script_name=#example test.py
输出文件=#示例test.txt
param1='python-m pylint--max line length=400-d relative beyond top level,通配符导入--msg template=“{abspath}| |{path}|{symbol}|{msg| id}|{line}|{column}| |{msg}”--reports=y'+脚本名
param2='>'+输出文件
参数=参数1+参数2
os.system(param)#这将在命令提示符下执行最终命令

添加分隔符(如|)是绝对正确的。这可以帮助我分离数据。但仍然不确定我们如何从Python代码中执行这些命令。我告诉过你:你可以直接使用pylint.lint.PyLinter,你绝对不应该,你应该使用
子流程。运行
并调用pylint,就像在命令行上一样,然后解析它的输出。我找到了一个解决方案,即使用
os.system(命令)
。这对我有用。谢谢你的建议。