我从批处理文件启动LabVIEW以自动化构建。从我的构建步骤开始,我在LabVIEW中使用.NET和Windows API执行以下操作打印到StdOut - 我将在这里使用一些伪代码:
process=GetCurrentProcess()
handle=process.GetCurrentHandle()
int32Value=handle.ToInt32()
GetStdHandle(-11)
DuplicateHandle(bunch of inputs)
If Duplicate Handle Fails
{
AttachConsole
}
Console.Write("I write this string")
无论如何,这可以工作并将我的字符串打印到控制台。但是,在打印此文本时,我尝试重定向时不会将其重定向到文件。
set STDOUT=stdout.log
start /wait LabVIEW.exe "C:\Users\<username>\Desktop\BuildSuccess.vi" 1>> C:\%STDOUT%
它没有被重定向到文件这一事实让我觉得我对StdOut的引用存在一些问题,即使它已经打印到控制台。我之所以不直接从LabVIEW编写文件是因为我最终希望Bamboo能够捕获我的StdOut(因为它似乎已经与我回应的其他命令一起)并自动登录到它的文件。但是,这些字符串并没有显示在该日志文件中,这导致我走这条路。
我知道我有效地尝试从Windows GUI写入控制台,根据我的阅读,这似乎有些失误,所以我不反对写一个文件,然后通过我的批处理脚本读取该文件并回显它。但是,我想我可以试一试。
编辑:看起来我的DuplicateHandle失败了,因此它会附加到控制台并在那里打印。我会调查一下。
编辑2:新信息,这在某种程度上证实了我的想法。这与编辑#1无关:
@echo off
cd "C:\Program Files (x86)\National Instruments\LabVIEW 2013"
FOR /F "tokens=*" %%G IN ('start /wait LabVIEW.exe %USERPROFILE%\Desktop\BuildSuccess.vi"') DO
(printf "I am echoing the variable:\n" %%G)
此代码永远不会从for循环中打印任何内容,但我仍然会在控制台上看到我的应用程序直接写入的文本。这让我觉得它就像我的应用程序打印到控制台的文本没有被识别为来自所述应用程序的stdout
答案 0 :(得分:0)
我使用start / b而不是start / wait启动,输出被重定向到文件。