Я запускаю LabVIEW из пакетного файла для автоматизации сборки. С моей стадии сборки я печать на STDOUT, выполнив следующие действия в LabVIEW с .NET и Windows, API-- я собираюсь использовать некоторые псевдо-код здесь:StdOut из Windows GUI показывает в консоли, но не занесен в журнал
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, который, из того, что я читал, кажется, является немного faux pas, поэтому я не против писать в файл, а затем чтение этого файла через мой пакетный скрипт и повторение его. Но я подумал, что я сделаю это.
Редактировать: похоже, мой 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)
Этот код никогда не печатает ничего из для цикла, но я все еще вижу текст на консоль, которая непосредственно записывает мое приложение. Это заставляет меня думать, что это похоже на текст, который мое приложение печатает на консоль, не признано как stdout из упомянутого приложения.
Вы действительно пытаетесь создать файл журнала в корне диска C: как это невозможно без прав администратора по умолчанию с Windows Vista? И используйте '% USERPROFILE%' вместо 'C: \ Users \' в пакетном файле. Вы можете использовать 'type" CreatedLogFile.log "' в вашем пакетном файле, если принято решение записать сначала в файл, а затем вывести его в пакетном файле. –
Mofi
В конечном итоге я не напишу на C; это было просто для тестирования, и я работаю как Admin. Кроме того, это остается нерешенным, у меня есть направление, но не решение. Спасибо за подсказку по использованию типа. Я, вероятно, поеду по этому маршруту. – gfree