使用子进程从python运行Pylint:错误30

eyh26e7m  于 2023-02-18  发布在  Python
关注(0)|答案(2)|浏览(131)

我尝试使用库"subprocess"从Python脚本运行Pylint;但是,我总是收到以下错误:
命令'['pylint','E:\python_projects\machine_learning_projects\alibi','--recursive = True']'返回了非零退出状态30。
源代码为:

import os
import pandas as pd
import subprocess

def pylint_project(project_path):

    if not os.path.exists(project_path):
        raise ValueError("Path not valid.")
        output = subprocess.check_output(['pylint', project_path, "--recursive=True"]).decode('utf-8')
        rating = output.split('Your code has been rated at ')[1].split('/')[0]
    except Exception as e:
        print(e)
        rating = None
    df = pd.DataFrame({'project': [os.path.basename(project_path)], 'rating': [rating]})

    return df

path = "E:\python_projects\machine_learning_projects\\alibi\\"
print(pylint_project(path))

我尝试使用CMD运行相同的命令,没有错误(我假设always安装正确)
我正在使用的操作系统是"Windows 11"。
我该怎么修呢?

v1uwarro

v1uwarro1#

这就是pylint的工作原理,如果它检测到警告/错误,它会返回一个 non-zero 值的位图退出代码来指示它检测到了什么类型的东西。
现在,您正在使用subprocess.check_output()-在其文档中,说明如下:

**如果返回代码为非零,则会引发CalledProcessError。**CalledProcessError对象将在returncode属性中包含返回代码,并在output属性中包含任何输出。

(着重号是我的)
如果执行pylint --help,您将看到以下内容:

--exit-zero           Always return a 0 (non-error) status code, even if
                        lint errors are found. This is primarily useful in
                        continuous integration scripts. (default: False)

那么,将--exit-zero添加到传递给pylint的参数中,或者为CalledProcessError添加异常处理,或者切换到subprocess.run()

afdcj2ne

afdcj2ne2#

请不要使用subprocess,pylint有一个API:

from pylint import run_pylint

run_pylint(argv=[project_path, "--recursive=True"])

参见https://pylint.readthedocs.io/en/latest/development_guide/api/pylint.html

相关问题