我尝试使用库"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"。
我该怎么修呢?
2条答案
按热度按时间v1uwarro1#
这就是pylint的工作原理,如果它检测到警告/错误,它会返回一个 non-zero 值的位图退出代码来指示它检测到了什么类型的东西。
现在,您正在使用
subprocess.check_output()
-在其文档中,说明如下:**如果返回代码为非零,则会引发CalledProcessError。**CalledProcessError对象将在returncode属性中包含返回代码,并在output属性中包含任何输出。
(着重号是我的)
如果执行
pylint --help
,您将看到以下内容:那么,将
--exit-zero
添加到传递给pylint的参数中,或者为CalledProcessError
添加异常处理,或者切换到subprocess.run()
?afdcj2ne2#
请不要使用
subprocess
,pylint有一个API:参见https://pylint.readthedocs.io/en/latest/development_guide/api/pylint.html