PowerShell을 사용하여 콘솔 앱의 무한 출력을 파이프 할 수 없음

좋은 밤 얼간이 프라이드

콘솔 앱을 개발하는 동안 PowerShell에서 출력을 자체적으로 파이프 할 수 없음을 발견했습니다.

다음과 같이 작동하는 작은 재현 (아래 소스)을 만들었습니다.

PS> .\but-why.exe print # continuously prints a random number every 500 ms
1746112985
1700785785
331650882
...
PS> .\but-why.exe read # echoes stdin
foo                    # this was typed
read 'foo'
bar                    # this too
read 'bar'
PS> "foo","bar" | .\but-why.exe read
read 'foo'
read 'bar'

그러나 나는의 출력을 공급하려고 할 때 printread아무 일도 발생하지 않습니다를 :

PS> .\but-why.exe print | .\but-why.exe read

모든 출력을 성공 스트림으로 리디렉션 할 때도 동일합니다.

PS> .\but-why.exe print *>&1 | .\but-why.exe read

그러나 CMD를 사용하면 모든 것이 예상대로 작동합니다.

CMD> but-why.exe print | but-why.exe read
read '317394436'
read '1828759797'
read '767777814'
...

디버깅을 통해 두 번째 인스턴스 .\but-why.exe read가 시작되지 않은 것 같습니다.

아마도 그것은 나의 오래된 PS 버전일까요?

PS> $host.Version

Major  Minor  Build  Revision
-----  -----  -----  --------
5      1      19041  610

콘솔 앱 소스 (net5.0) :

using System;
using System.Threading;

switch (args[0]) {
    case "print": Print(); break;
    case "read": Read(); break;
}

void Print() {
    var rng = new Random();
    while (true) {
        Console.WriteLine(rng.Next());
        Thread.Sleep(500);
    }
}

void Read() {
    string? text;
    while ((text = Console.ReadLine()) != null) {
        Console.WriteLine($"read '{text}'");
    }
}
mklement0

당신은보고있는 디자인 제한 에서 Windows PowerShell을 하기 때문에 크로스 플랫폼에서 수정되었습니다 PowerShell을 [코어] 7+ 버전 :

Windows PowerShell 이 외부 프로그램간에 텍스트 파이프 할 때 예기치 않게 일반적인 스트리밍 동작 이 나타나지 않습니다 .

즉, 수신 되는대로 출력 줄을 전달하는 대신 PowerShell 은 첫 번째 프로그램에서 모든 출력수집 한 다음 두 번째 프로그램으로 전달하려고합니다.

귀하의 경우 첫 번째 프로그램이 출력 생성을 멈추지 않기 때문에 Windows PowerShell 엔진은 모든 출력이 수집 되기를 기다리는 것을 멈추지 않으므로 효과적으로 중단됩니다 (결국 메모리가 부족할 때까지). 대상 프로그램이 시작되지도 않습니다. 출력 수집이 완료된 후에 만 발생합니다 .


해결 방법 :

  • 가능한 경우이 제한이 제거 된 PowerShell [Core] 7+로 전환합니다 .

  • Windows PowerShell에서 cmd.exe관찰 한대로 예상되는 스트리밍 동작을 나타내는를 통해 파이프 라인을 호출합니다 .

    # Workaround via cmd.exe
    cmd /c '.\but-why.exe print | .\but-why.exe read'
    

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

PowerShell에서 콘솔 앱의 출력을 자체로 파이프 할 수 없음

분류에서Dev

terraform을 사용하여 AWS 콘솔에서 람다 코드를 업데이트 할 수 없음

분류에서Dev

watch 명령을 사용하여 파일의 최상위 명령 출력을 캡처 할 수 없음

분류에서Dev

콘솔을 사용하여 프로그램을 시작할 때 파일에 쓸 수 없습니다.

분류에서Dev

Bitbucket 파이프 라인을 사용하여 Heroku에서 스프링 부팅 앱을 배포 할 수 없음

분류에서Dev

inotifywait가 콘솔에 출력을 파이프하지 않음

분류에서Dev

Java 8 Nashorn : 콘솔을 사용할 수 없음

분류에서Dev

PRINT 출력을 콘솔로 리디렉션 할 수없는 이유는 무엇입니까?

분류에서Dev

사용자 정의 콘솔 키맵-포함 파일을 열 수 없음

분류에서Dev

awk 파이프 출력을 사용할 수 없습니다.

분류에서Dev

PowerShell을 사용하여 ISO 이미지 파일을 탑재 할 수 없음

분류에서Dev

신속한 플레이 그라운드를 사용하여 어시스턴트 편집기에서 콘솔 출력을 볼 수 없습니다.

분류에서Dev

콘솔 앱에서 QueueClient.OnMessage를 사용하여 디버그 할 수 없음

분류에서Dev

Ionic을 사용하여 앱을 실행할 수 없음 (권한 거부 됨)

분류에서Dev

파이프 된 출력을 grep 할 수 없음

분류에서Dev

Eclipse에서 항상 동일한 애플리케이션의 출력을 표시하도록 두 개의 콘솔보기를 구성 할 수 있습니까?

분류에서Dev

ZF2 콘솔 앱이 파일에서 배열을 읽을 수 없음

분류에서Dev

콘솔에서 C ++ 프로그램의 출력을 볼 수 없습니다.

분류에서Dev

PyCharm 콘솔이 명백한 이유없이 "없음"을 출력 함

분류에서Dev

소프트웨어 센터를 사용하여 앱을 설치할 수 없음

분류에서Dev

Rails 콘솔을 사용하여 고유 한 시드 데이터를 식별 할 수 있습니까?

분류에서Dev

Linux에서 직렬 콘솔을 사용할 때 입력을 입력 할 수없는 이유는 무엇입니까?

분류에서Dev

배치 파일의 인수를 사용하여 AC # 콘솔 앱을 실행하는 방법

분류에서Dev

Android 앱의 로그 출력을 이해할 수 없습니다.

분류에서Dev

Android 앱의 로그 출력을 이해할 수 없습니다.

분류에서Dev

EKS가 Kubectl을 사용하여 Kubernetes에 인증 할 수 없음- "사용자 : 수행 권한이 없음 : sts : AssumeRole"

분류에서Dev

실행 된 명령의 출력을 파일 C # 콘솔 애플리케이션에 저장할 수 없습니다.

분류에서Dev

Java : 콘솔과 파일에서 콘솔의 모든 출력을 인쇄하는 방법은 무엇입니까?

분류에서Dev

긴 데이터 브레이크 출력을위한 콘솔의 Rails Hirb 콘솔

Related 관련 기사

  1. 1

    PowerShell에서 콘솔 앱의 출력을 자체로 파이프 할 수 없음

  2. 2

    terraform을 사용하여 AWS 콘솔에서 람다 코드를 업데이트 할 수 없음

  3. 3

    watch 명령을 사용하여 파일의 최상위 명령 출력을 캡처 할 수 없음

  4. 4

    콘솔을 사용하여 프로그램을 시작할 때 파일에 쓸 수 없습니다.

  5. 5

    Bitbucket 파이프 라인을 사용하여 Heroku에서 스프링 부팅 앱을 배포 할 수 없음

  6. 6

    inotifywait가 콘솔에 출력을 파이프하지 않음

  7. 7

    Java 8 Nashorn : 콘솔을 사용할 수 없음

  8. 8

    PRINT 출력을 콘솔로 리디렉션 할 수없는 이유는 무엇입니까?

  9. 9

    사용자 정의 콘솔 키맵-포함 파일을 열 수 없음

  10. 10

    awk 파이프 출력을 사용할 수 없습니다.

  11. 11

    PowerShell을 사용하여 ISO 이미지 파일을 탑재 할 수 없음

  12. 12

    신속한 플레이 그라운드를 사용하여 어시스턴트 편집기에서 콘솔 출력을 볼 수 없습니다.

  13. 13

    콘솔 앱에서 QueueClient.OnMessage를 사용하여 디버그 할 수 없음

  14. 14

    Ionic을 사용하여 앱을 실행할 수 없음 (권한 거부 됨)

  15. 15

    파이프 된 출력을 grep 할 수 없음

  16. 16

    Eclipse에서 항상 동일한 애플리케이션의 출력을 표시하도록 두 개의 콘솔보기를 구성 할 수 있습니까?

  17. 17

    ZF2 콘솔 앱이 파일에서 배열을 읽을 수 없음

  18. 18

    콘솔에서 C ++ 프로그램의 출력을 볼 수 없습니다.

  19. 19

    PyCharm 콘솔이 명백한 이유없이 "없음"을 출력 함

  20. 20

    소프트웨어 센터를 사용하여 앱을 설치할 수 없음

  21. 21

    Rails 콘솔을 사용하여 고유 한 시드 데이터를 식별 할 수 있습니까?

  22. 22

    Linux에서 직렬 콘솔을 사용할 때 입력을 입력 할 수없는 이유는 무엇입니까?

  23. 23

    배치 파일의 인수를 사용하여 AC # 콘솔 앱을 실행하는 방법

  24. 24

    Android 앱의 로그 출력을 이해할 수 없습니다.

  25. 25

    Android 앱의 로그 출력을 이해할 수 없습니다.

  26. 26

    EKS가 Kubectl을 사용하여 Kubernetes에 인증 할 수 없음- "사용자 : 수행 권한이 없음 : sts : AssumeRole"

  27. 27

    실행 된 명령의 출력을 파일 C # 콘솔 애플리케이션에 저장할 수 없습니다.

  28. 28

    Java : 콘솔과 파일에서 콘솔의 모든 출력을 인쇄하는 방법은 무엇입니까?

  29. 29

    긴 데이터 브레이크 출력을위한 콘솔의 Rails Hirb 콘솔

뜨겁다태그

보관