Wine에서 Windows 명령줄 프로그램의 stdout 리디렉션

Wine에서 Windows 명령줄 프로그램의 stdout 리디렉션

저는 Wine을 사용하여 Windows 명령줄 프로그램(액세스 권한이 없음)을 실행합니다. 분명히 표준 출력에 무언가를 쓰고 있는데 그 출력을 캡처하려고 하는데 리디렉션할 수 없습니다.

stdout 또는 stderr을 파일로 리디렉션하는지 여부에 관계없이 프로그램 출력은 여전히 ​​콘솔에 인쇄되며 파일에 기록되지 않습니다. stderr를 리디렉션하면 와인 출력이 사라지지만 프로그램 출력은 여전히 ​​화면에 인쇄됩니다.

wine program.exe > out   # File is empty, program output printed on screen
wine program.exe 2> out  # Wine output gets redirected to file, program output still printed on screen

둘 다 리디렉션하면 출력이 화면에 인쇄되지도 않고 파일에 기록되지도 않습니다.

편집하다:Windows에서는 동작이 비슷하지만 둘 다 리디렉션하면 모든 것이 여전히 화면에 인쇄됩니다.

다음은 완전한 출력이 포함된 몇 가지 예입니다.

$ wine program.exe
fixme:winediag:start_process Wine Staging 1.9.23 is a testing version containing experimental patches.
fixme:winediag:start_process Please mention your exact version when filing bug reports on winehq.org.

output by program.exe

fixme:msvcrt:__clean_type_info_names_internal (0x100aaa54) stub

출력을 리디렉션하려고 하면 이런 일이 발생합니다.

$ wine program.exe > out 2>&1
$ cat out
fixme:winediag:start_process Wine Staging 1.9.23 is a testing version containing experimental patches.
fixme:winediag:start_process Please mention your exact version when filing bug reports on winehq.org.
fixme:msvcrt:__clean_type_info_names_internal (0x100aaa54) stub

즉, 프로그램의 콘솔 출력이 완전히 손실됩니다. 프로그램은 여전히 ​​잘 작동하며 예상대로 일부 파일을 작성합니다. 확인 차원에서 pngcrush로 동일한 작업을 수행하여 예상한 결과를 얻었습니다. 리디렉션 없이:

$ wine pngcrush_1_8_10_w32.exe test.png out.png
fixme:winediag:start_process Wine Staging 1.9.23 is a testing version containing experimental patches.
fixme:winediag:start_process Please mention your exact version when filing bug reports on winehq.org.

 | pngcrush-1.8.10
 |    Copyright (C) 1998-2002, 2006-2016 Glenn Randers-Pehrson
 |    Portions Copyright (C) 2005 Greg Roelofs
 | This is a free, open-source program.  Permission is irrevocably
 | granted to everyone to use this version of pngcrush without
 | payment of any fee.
 | Executable name is pngcrush_1_8_10_w32.exe
 | It was built with   bundled libpng-1.6.26
 | and is running with bundled libpng-1.6.26
 |    Copyright (C) 1998-2004, 2006-2016 Glenn Randers-Pehrson,
 |    Copyright (C) 1996, 1997 Andreas Dilger,
 |    Copyright (C) 1995, Guy Eric Schalnat, Group 42 Inc.,
 | and bundled zlib-1.2.8.1-motley, Copyright (C) 1995 (or later),
 |    Jean-loup Gailly and Mark Adler,
 | and using "clock()".
 | It was compiled with gcc version 4.8.0 20121015 (experimental).

  Recompressing IDAT chunks in test.png to out.png
   Total length of data found in critical chunks            =    431830
   Critical chunk length, method   1 (ws 15 fm 0 zl 4 zs 0) =    495979
   Critical chunk length, method   2 (ws 15 fm 1 zl 4 zs 0) >    495979
   Critical chunk length, method   3 (ws 15 fm 5 zl 4 zs 1) =    495354
   Critical chunk length, method   6 (ws 15 fm 5 zl 9 zs 0) =    457709
   Critical chunk length, method   9 (ws 15 fm 5 zl 2 zs 2) >    457709
   Critical chunk length, method  10 (ws 15 fm 5 zl 9 zs 1) =    451813
   Best pngcrush method        =  10 (ws 15 fm 5 zl 9 zs 1) =    451813
     (4.63% critical chunk increase)
     (4.63% filesize increase)

CPU time decode 4.407583, encode 17.094248, other 4294967296.000000, total 17.180143 sec

리디렉션 사용:

$ wine pngcrush_1_8_10_w32.exe test.png out.png > out 2>&1
$ cat out
fixme:winediag:start_process Wine Staging 1.9.23 is a testing version containing experimental patches.
fixme:winediag:start_process Please mention your exact version when filing bug reports on winehq.org.

 | pngcrush-1.8.10
 |    Copyright (C) 1998-2002, 2006-2016 Glenn Randers-Pehrson
 |    Portions Copyright (C) 2005 Greg Roelofs
 | This is a free, open-source program.  Permission is irrevocably
 | granted to everyone to use this version of pngcrush without
 | payment of any fee.
 | Executable name is pngcrush_1_8_10_w32.exe
 | It was built with   bundled libpng-1.6.26
 | and is running with bundled libpng-1.6.26
 |    Copyright (C) 1998-2004, 2006-2016 Glenn Randers-Pehrson,
 |    Copyright (C) 1996, 1997 Andreas Dilger,
 |    Copyright (C) 1995, Guy Eric Schalnat, Group 42 Inc.,
 | and bundled zlib-1.2.8.1-motley, Copyright (C) 1995 (or later),
 |    Jean-loup Gailly and Mark Adler,
 | and using "clock()".
 | It was compiled with gcc version 4.8.0 20121015 (experimental).

  Recompressing IDAT chunks in test.png to out.png
   Total length of data found in critical chunks            =    431830
   Critical chunk length, method   1 (ws 15 fm 0 zl 4 zs 0) =    495979
   Critical chunk length, method   2 (ws 15 fm 1 zl 4 zs 0) >    495979
   Critical chunk length, method   3 (ws 15 fm 5 zl 4 zs 1) =    495354
   Critical chunk length, method   6 (ws 15 fm 5 zl 9 zs 0) =    457709
   Critical chunk length, method   9 (ws 15 fm 5 zl 2 zs 2) >    457709
   Critical chunk length, method  10 (ws 15 fm 5 zl 9 zs 1) =    451813
   Best pngcrush method        =  10 (ws 15 fm 5 zl 9 zs 1) =    451813
     (4.63% critical chunk increase)
     (4.63% filesize increase)

CPU time decode 4.339310, encode 17.137527, other 4.294083, total 17.182100 sec

다른 프로그램이 작동하지 않는 이유는 무엇입니까?

와인 표준 출력 표준 오류 IO 리디렉션

답변1

tmux 터미널 멀티플렉서를 사용하여 표준 출력을 캡처할 수 있습니다.capture-pane

답변2

.bat 스크립트를 생성하고 거기에서 리디렉션하는 것은 어떻습니까?

binary.exe args > output.txt그리고 간단히 실행wine start script.bat

방금 해봤는데 정말 효과가 좋았어요

답변3

이 질문에는 결함이 있습니다 wine program.exe >out.아니요출력 리디렉션 program.exe- 자체 출력을 리디렉션합니다 wine.이는 program.exe 출력과 동일할 수도 있고 동일하지 않을 수도 있습니다.

쉘이 명령을 처리할 때 명령이 wine. 또한 wine파일로 리디렉션하려는 출력을 찾습니다 out. (대부분) 이를 무시합니다 program.exe. 변수 확장 등의 경우에만 처리합니다. 하지만 셸에는 전달된 텍스트 인수일 뿐입니다 wine. 또한 이를 입력할 수도 있으며 쉘은 그것이 실제로 존재하는지 wine foorbar.exe >out여부를 신경 쓰지 않거나 확인하지 않습니다 . foorbar.exe쉘은 그것을 전달 wine하고 wine그것으로 무엇을 해야할지 알아 보겠습니다.

쉘은 out출력을 쓰기 위해 파일을 엽니다( >사용된 경우 자르기 모드로, >>사용된 경우 추가 모드에서). 그런 다음 쉘은 wine바이너리/실행 파일을 찾으려고 시도합니다 .

찾을 수 없으면 wine오류 메시지를 인쇄하고 아무것도 쓰지 않고 파일을 닫은 다음 out(빈 파일임) 새 명령 프롬프트를 표시합니다.

명령이wine 일단 발견되면 단일 인수로 실행 program.exe하고 출력 wineout. 쉘이 이미 처리하고 있기 때문에 wine결코 볼 수 없습니다 .>out

wine이제 부팅하고 추가 I/O(입/출력) 스트림을 포함하거나 포함하지 않을 수 있는 Windows와 유사한 환경을 설정하는 데 필요한 모든 작업을 수행하십시오. 그것은 모두 구성 및 설정 방법에 따라 다릅니다 wine. 이러한 스트림은 wine실행 전에 설정된 입력/출력 스트림(또는 사용하는 모든 쉘) 에 바인딩되거나 바인딩되지 않을 수 있습니다 .bashwine

이 시점에서는 리디렉션이 표시되지 않으므로 wine찾아 실행해 보세요 program.exe.wine>out아니요추가 리디렉션을 설정합니다.

보시다시피, 이제는 다양한 프로세스 및/또는 파일과 관련된 다양한 I/O 스트림으로 인해 상황이 매우 복잡해졌습니다.

wineconsoleWine에는 "CUI"(콘솔 모드) 프로그램과 같은 유사한 상황을 처리하기 위한 다양한 도구, 작동 모드 및 구성이 있습니다 . 이러한 도구를 사용하고 필요한 환경을 설정하는 방법, CUI 모드 리디렉션을 설정하는 방법 등을 알아보려면 Wine 설명서를 읽어야 합니다.

여기에 답변을 게시하기에는 이 모든 것이 너무 복잡합니다. 문서를 읽고 스스로 알아내도록 노력해야 하며, 문제가 발생하면 더 구체적인 질문과 세부 정보를 게시해야 합니다.

따라서 이 답변의 "tl;dr" 버전은 다음과 같습니다. 이 사이트의 범위와 목적을 벗어나므로 여기에 게시할 수 있는 답변이 없습니다. 원래 질문이 너무 많이 제기되었습니다.잘못된전체 시스템이 어떻게 작동하는지에 대한 가설.

관련 정보