"Write-Host", "Write-Output" 또는 "[console]"의 차이점은 무엇입니까?: WriteLine?
메시지를 출력하는 방법에는 여러 가지가 있습니다.를 통해 무언가를 출력하는 것의 효과적인 차이는 무엇입니까?Write-Host
,Write-Output
, 또는[console]::WriteLine
?
또, 다음과 같은 것을 사용할 수 있습니다.
write-host "count=" + $count
그+
출력에 포함됩니다.왜요?표현식은 쓰기 전에 하나의 연결된 문자열을 생성하기 위해 평가되어야 하지 않나요?
Write-Output
파이프라인에서 데이터를 전송할 때 사용해야 하지만 반드시 화면에 표시할 필요는 없습니다.파이프라인이 최종적으로 그것을 쓸 것이다.out-default
다른 어떤 것도 먼저 사용하지 않는다면요.
Write-Host
반대로 하고 싶을 때 쓰는 게 좋을 것 같아요.
[console]::WriteLine
본질적으로는Write-Host
막후에서 하고 있어요.
이 데모 코드를 실행하여 결과를 조사합니다.
function Test-Output {
Write-Output "Hello World"
}
function Test-Output2 {
Write-Host "Hello World" -foreground Green
}
function Receive-Output {
process { Write-Host $_ -foreground Yellow }
}
#Output piped to another function, not displayed in first.
Test-Output | Receive-Output
#Output not piped to 2nd function, only displayed in first.
Test-Output2 | Receive-Output
#Pipeline sends to Out-Default at the end.
Test-Output
연결 작업을 괄호로 묶어야 PowerShell이 연결 작업을 처리한 후 다음 매개 변수 목록을 토큰화해야 합니다.Write-Host
또는 문자열 보간을 사용합니다.
write-host ("count=" + $count)
# or
write-host "count=$count"
그나저나 파이프라인이 어떻게 작동하는지 설명하는 제프리 스누버의 비디오를 보세요.PowerShell을 처음 배웠을 때 파이프라인이 어떻게 작동하는지 설명하는 가장 유용한 설명이었습니다.
Andy가 말한 것과는 별도로 중요한 다른 점이 있습니다. 즉, 호스트에 직접 쓰기 호스트를 사용하고 아무것도 반환하지 않습니다.즉, 출력은 파일로 리다이렉트 할 수 없습니다.
---- script a.ps1 ----
write-host "hello"
이제 PowerShell에서 실행:
PS> .\a.ps1 > someFile.txt
hello
PS> type someFile.txt
PS>
표시된 것처럼 파일을 파일로 리디렉션할 수 없습니다.조심하지 않는 사람에게는 놀라운 일일지도 모른다.
그러나 대신 쓰기 출력을 사용하도록 전환하면 리다이렉션이 예상대로 작동합니다.
기입 출력에 상당하는 것을 실현하는 또 다른 방법이 있습니다.문자열을 따옴표로 묶습니다.
"count=$count"
이 실험을 실행하면 Write-Output과 동일하게 동작하는지 확인할 수 있습니다.
"blah blah" > out.txt
Write-Output "blah blah" > out.txt
Write-Host "blah blah" > out.txt
첫 번째 두 개는 "blah blah"를 출력합니다.txt, 하지만 세 번째는 안 돼.
「help Write-Output」에서는, 다음의 동작의 힌트를 얻을 수 있습니다.
이 cmdlet은 일반적으로 콘솔에 문자열 및 기타 개체를 표시하는 스크립트에서 사용됩니다.그러나 기본 동작은 파이프라인 끝에 개체를 표시하는 것이므로 일반적으로 cmdlet을 사용할 필요가 없습니다.
이 경우 문자열 자체 "count=$count"는 파이프라인 끝에 있는 개체이며 표시됩니다.
용방의 Write-Host
는 다음 진단을 생성합니다.
Write-Host
일부 호스트에서는 동작하지 않을 수 있으며, 호스트가 없는 경우 동작하지 않으며, (PS 5.0 이전 버전)을 억제, 캡처 또는 리다이렉트 할 수 없기 때문입니다.''를 합니다.Write-Output
,Write-Verbose
, 「」Write-Information
.
자세한 내용은 이 규칙 뒤에 있는 설명서를 참조하십시오.후세를 위한 발췌문:
「 」의
Write-Host
는, 「 」를 사용해 하지 않는 한, 권장되지 않습니다.Show
. 그Show
동사는 명시적으로 "다른 가능성 없이 화면에 표시"를 의미합니다.를 사용한
Show
이치노
Jeffrey Snover는 블로그 투고를 통해 Write-Host는 자동화를 방해하고 진단 뒤에 더 많은 설명을 제공하기 때문에 Write-Host는 거의 항상 잘못된 작업이라고 주장합니다.하지만 위의 내용은 좋은 요약입니다.
테스트 결과 Write-Output 및 [Console]:: WriteLine()은 Write-Host보다 성능이 훨씬 우수합니다.
얼마나 많은 텍스트를 써야 하는지에 따라 이것은 중요할 수 있습니다.
Write-Host, Write-Output 및 [Console]에 대해 각각 5가지 테스트를 수행한 결과는 다음과 같습니다.: WriteLine().
제 경험상으로는 실제 데이터를 다룰 때 cmdlet을 포기하고 하위 수준의 명령으로 이동하여 스크립트에서 적절한 성능을 얻을 수 있어야 합니다.
measure-command {$count = 0; while ($count -lt 1000) { Write-Host "hello"; $count++ }}
1312ms
1651ms
1909ms
1685ms
1788ms
measure-command { $count = 0; while ($count -lt 1000) { Write-Output "hello"; $count++ }}
97ms
105ms
94ms
105ms
98ms
measure-command { $count = 0; while ($count -lt 1000) { [console]::WriteLine("hello"); $count++ }}
158ms
105ms
124ms
99ms
95ms
[콘솔]에 대해서:: WriteLine() - (powershell이 아닌) CMD에서 파이프라인을 사용하는 경우 사용합니다.예를 들어 PS1에서 많은 데이터를 stdout으로 스트리밍하고 기타 유틸리티를 사용하여 데이터를 소비/변환할 필요가 있다고 합시다.스크립트에서 Write-Host를 사용하면 속도가 크게 느려집니다.
언급URL : https://stackoverflow.com/questions/8755497/whats-the-difference-between-write-host-write-output-or-consolewrite
'programing' 카테고리의 다른 글
Dispatch Queue.main.async와 Dispatch Queue.main.sync의 차이점 (0) | 2023.04.16 |
---|---|
저장 프로시저란 무엇입니까? (0) | 2023.04.16 |
워크북의 끝에 VBA 복사 시트(숨긴 워크시트 포함) (0) | 2023.04.16 |
github에서 모든 커밋 이력을 삭제하는 방법 (0) | 2023.04.16 |
문자열 길이를 기준으로 Python 목록 정렬 (0) | 2023.04.16 |