Как выполнить команду pylint из кода python. Кроме того, какой аргумент в Pylint может сделать сообщение журнала в соответствии с моими потребностями - PullRequest
1 голос
/ 13 февраля 2020

У меня есть сценарий, когда я хочу выполнить команду 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)

Ответы [ 2 ]

1 голос
/ 13 февраля 2020

Помимо этого, я хочу отформатировать свое сообщение так, чтобы позже я мог использовать метод split для разделения аргументов и подачи в отчет, как в Excel.

python3 -m pylint --msg-template="{module}{obj}{line}{column}{msg}" init.py

Рассматривали ли вы просто помещать разделители в шаблон сообщения?

Потому что здесь вы просто удаляете все элементы вместе, тогда как c не кажется очень полезным или полезным, но не трудно исправить или:

$ 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, "symboli c имя сообщения":

$ 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)

У меня есть сценарий, когда я хочу запустить команду pylint с использованием файла Python.

Использование подпроцесса для запуска pylint, вероятно, самый простой и лучший поддерживается способ сделать это. Вы можете настроить и запустить pylint.lint.PyLinter вручную, но, насколько я знаю, это недокументировано, не поддерживается, вызывает абсолютную боль в заднице и имеет тенденцию легко падать (как сбой в цилиндре - что, к сожалению, часто встречается) - будет снести весь сценарий). Раньше мы делали это в $ dayjob и возвращались к запуску CLI в подпроцессе, это намного надежнее.

0 голосов
/ 12 марта 2020

Один из способов, которым я использую Pylint, чтобы у любого выходного журнала был разделитель, и я мог сохранить его в файле .txt.

Кроме этого, я запускаю сценарий Python. Здесь поместите ваш скрипт, для которого вы хотите запустить Pylint в script_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
...