如何在使用MsBuild生成.pyproj时运行PyLint?

2024-04-24 15:30:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要在构建时运行PyLint来验证Python文件代码。pyproj下有python文件(我在visualstudio2015中使用python工具)。我怎么能做到呢?在

更新:

到目前为止,我有这样的代码:

<Target Name="PythonRunPyLint">
    <PropertyGroup>
        <PyLintWarningRegex><![CDATA[^(?<filename>.+?)\((?<line>\d+),(?<column>\d+)\): warning (?<msg_id>.+?): (?<message>.+?)$]]></PyLintWarningRegex>
    </PropertyGroup>
    <RunPythonCommand Target="pylint.lint"
                             TargetType="module"
                             Arguments="&quot;--msg-template={abspath}({line},{column}): warning {msg_id}: {msg} [{C}:{symbol}]&quot; -r n @(Compile, ' ')"
                             ExecuteIn="console"
                             WorkingDirectory="$(MSBuildProjectDirectory)"
                             WarningRegex="$(PyLintWarningRegex)"
                             RequiredPackages="pylint&gt;=1.0.0"> 
        <Output TaskParameter="ConsoleOutput" PropertyName="OutputText" />
        <Output TaskParameter="ConsoleError" PropertyName="ErrorText" />
    </RunPythonCommand>
</Target>

但当我运行msbuild时,得到的输出是0个警告,为什么regex不解析警告(regex来自Microsoft.PythonTools.targets当你在visualstudio中运行PyLint时,它还能工作吗?在

^{pr2}$

Tags: 文件代码idtargetoutputlinecolumnmsg
3条回答

最后我得到了以下代码:

<Target Name="Build">
    <RunPythonCommand Target="pylint.lint"
                         TargetType="module"
                         Arguments="&quot;--msg-template={path}({line},{column}): warning: [{msg_id}{obj}] {msg}&quot; -r n @(Compile, ' ')"
                         ExecuteIn="console"
                         WorkingDirectory="$(MSBuildProjectDirectory)"
                         RequiredPackages="pylint&gt;=1.0.0"
                         ConsoleToMSBuild="true"
                         ContinueOnError="true">
          <Output TaskParameter="ConsoleOutput" ItemName="OutputText" />
          <Output TaskParameter="ConsoleError" PropertyName="ErrorText" />
    </RunPythonCommand>
     <WriteLinesToFile
            File="lint_output.txt"
            Lines="@(OutputText)"
            Overwrite="true"
            Encoding="Unicode"/>
     <Exec ContinueOnError="true"
          IgnoreExitCode="true"
          Command='type lint_output.txt'/>
  </Target>

现在,msbuild TestPylint.pyproj /t:Build统计错误/警告,错误/警告也显示在visualstudio错误列表窗口中。在

使用任务WriteLinesToFile是因为我没有找到msbuild识别错误/警告的任何其他方法<Exec Command="echo $(OutputText)/>(如果OutputText是属性)根本无法工作!在

它不是开箱即用的,但是如果你有兴趣,你可以把它添加到你的项目中。找到Microsoft.PythonTools.targets,然后在里面找到{}。将其复制到您的项目中,将其重命名为类似于“pythonrunpyline”的名称,并在其中将CreatePythonCommandItem替换为RunPythonCommand。您可能还必须删除该元素上的某些属性(基本上MSBuild会抱怨的任何属性都不存在),并删除子元素<Output>。在

那就用那个目标开始构建。在

与@Nmktronas提出的解决方案略有不同。在

<Target Name="CoreCompile">
  <ResolveEnvironment ContinueOnError="WarnAndContinue">
    <Output TaskParameter="InterpreterPath" PropertyName="InterpreterPath" />
  </ResolveEnvironment>
  <Exec Condition="Exists($(InterpreterPath))"
        Command="(set PYTHONPATH=$(SearchPath)) &amp; &quot;$(InterpreterPath)&quot; -m pylint.lint &quot;--msg-template={path}({line},{column}): warning: [{msg_id}{obj}] {msg}&quot; -r n @(Compile, ' ')"
        WorkingDirectory="$(MSBuildProjectDirectory)"
        IgnoreExitCode="true" />
</Target>

相关问题 更多 >