I Windows 명령 콘솔에 쓸 수있는 다음과 같은 코드가 있습니다쓰기는 콘솔에
use Win32::Console;
my $console = new Win32::Console(Win32::Console::STD_ERROR_HANDLE());
my $defaultAttribute = $console->Attr();
my $defaultFG = ($defaultAttribute & 0x0F);
my $defaultBG = ($defaultAttribute & 0xF0);
$console->Attr($defaultBG | $Win32::Console::FG_LIGHTGREEN);
$console->Write("blah blah");
$console->Attr($defaultAttribute);
내 스크립트를 호출 할 때 사용자가 STDERR을 리디렉션하는 경우이 코드는 실패
를perl myscript.pl 2> foo
표준 핸들 중 하나를 참조하지 않고 프로세스가 연결된 Win32 콘솔에 대한 핸들을 얻으려면 어떻게해야합니까? 사용자가 어떤 방향 전환을 수행하든 문제가되지 않도록하려면 어떻게해야합니까?
내가 원하는 효과는 배시 내장형 time
명령과 비슷한 방식으로 리다이렉션과 관계없이 일반 프로그램 출력 바로 다음에 콘솔에 메시지를 쓸 수있게하려는 것입니다. 본질적으로 Unix에서 열기 및 쓰기와 비슷합니다. /dev/tty
.
나는 $console->Display()
에 이어 새로운 콘솔을 할당하기 위해 my $console = new Win32::Console()
을 시도했지만 이것은 완전히 잘못된 것입니다.
일반적으로 **는 ** 2> blubb라고 말하는 것은 좋은 이유입니다. 나는 그들이 침묵을 지키라고 말할 때 프로그램이주의를 요구할 때 그것을 싫어한다. – Ingo
@Ingo : 공정한 내용이지만 필자가 직접 작성한 프로그램의 요구 사항을 수정하지는 않습니다. :-) –
당신은 내 하루를 만들었습니다! 당신은 뜻밖의 실수로 2> NUL을 입력하면됩니다. – Ingo