Windows 将输出捕获到文件中并回放

问题描述 投票:0回答:1

我正在捕获在 Windows 中将进程运行到文件中的标准输出和标准错误:

.\run-process > debug-log.txt 2>&1

但问题是这将 stdout 和 stderror 合并到一个文件中,这意味着如果我想使用以下方式播放它:

type debug-log.txt

然后它只会输出。我想知道是否有一种方法可以捕获所有输出并播放它,无论它是给定的。

我问这个问题的原因是我想在我的存储库上运行 codeql 并使用

--command
但事实证明 codeql 在调用命令时非常慢(这是一个已知问题)。所以我想我可以捕获输出并欺骗 codeql 认为它是输出。

codeql database create --language=cpp --source-root=C:\testcodeqldatabase testcodeqldb --command="type release-log.txt"

但是我从 codeql 收到错误,我认为它知道这只是一个管道,而不是进程中所有输出的正确播放:

CodeQL 未检测到使用此 CodeQL 发行版支持的语言(C/C++、C#、CSV、Go、HTML、Java/Kotlin、JavaScript/TypeScript、Java Properties Files、Python、Ruby、Swift、XML 或 YAML)编写的任何代码。确认项目中存在其中一种语言的一些源代码。有关更多信息,请查看我们的故障排除指南:https://gh.io/troubleshooting-code-scanning/no-source-code-seen-during-build

windows cmd codeql
1个回答
0
投票

所以我想我可以捕获输出并欺骗 codeql 认为它是输出。

这很可能行不通。 CodeQL 监视构建过程以构建其数据库(请参阅文档):

对于编译语言,提取通过监视正常的构建过程来进行。每次调用编译器来处理源文件时,都会创建该文件的副本,并收集有关源代码的所有相关信息。这包括有关抽象语法树的语法数据以及有关名称绑定和类型信息的语义数据。

因此,仅重放您当前正在尝试的构建日志是行不通的; CodeQL 需要观察实际的构建过程。这也解释了为什么(至少对于编译语言)数据库创建将比常规构建花费更长的时间,因为 CodeQL 会监视常规构建并同时创建 CodeQL 数据库。

作为旁注:也许对于未来的 CodeQL 版本,为编译语言创建数据库将不再需要执行构建;对于 Java,有对新构建模式的测试版支持

none
,请参阅 发行说明

© www.soinside.com 2019 - 2024. All rights reserved.