Ich habe (glaub ich) eine super depperte Frage.
Ich habe einige Win32 Kommandozeilenprogramme (also wirklich für's Windows CONSOLE Subsystem kompiliert, leider closed Source), die ich unter Linux und FreeBSD mit wine ausführe. Funktioniert alles soweit wunderbar. Nur würde ich gerne die Ausgabe auf'm Terminal sauberer haben.
Wine bzw. wineconsole haut nämlich einen Haufen für mich belanglose Fehler und Warnungen mit raus, die ich nicht sehen will, weil das für mich als Nutzer nur Müll ist. Hier Mal ein Auszug, den
echten Programmoutput "Progress: n%" sieht man kaum noch:
002c:fixme:ntdll:get_firmware_info info_class SYSTEM_FIRMWARE_TABLE_INFORMATION
002c:fixme:ntdll:get_firmware_info info_class SYSTEM_FIRMWARE_TABLE_INFORMATION
002c:err:winediag:WS_getaddrinfo Failed to resolve your host name IP
0044:err:explorer:initialize_display_settings Failed to query current display settings for L"\\\\.\\DISPLAY1".
0044:err:ole:start_rpcss Failed to start RpcSs service
0090:err:winediag:nodrv_CreateWindow Application tried to create a window, but no driver could be loaded.
0090:err:winediag:nodrv_CreateWindow Make sure that your X server is running and that $DISPLAY is set correctly.
003c:err:service:process_send_command service protocol error - failed to read pipe r = 0 count = 0!
003c:fixme:service:scmdatabase_autostart_services Auto-start service L"WineBus" failed to start: 1053
Progress: 6%^C00c0:fixme:console:default_ctrl_handler Terminating process 20 on event 0
Progress: 7%[user@host ~/test]$ 00bc:fixme:console:default_ctrl_handler Terminating process b4 on event 0
00bc:fixme:msvcrt:__clean_type_info_names_internal (073B7148) stub
00bc:fixme:msvcrt:__clean_type_info_names_internal (07227678) stub
00bc:fixme:msvcrt:__clean_type_info_names_internal (071411B8) stub
Warum er ein Display will check' ich sowieso nicht, aber wurscht.
Im Prinzip sollte da in dem Fall nur eine Zeile stehen, wo er laufend die % hochzählt. Leider schreibt auch das Windows Tool seine Ausgabe scheinbar auf stderr, anstatt auf stdout.
Ich habe erst Mal versucht, einfach alles auf stdout zu mappen, und dann per grep alles wegzuschneiden, was ich nicht will. Also quasi z.B. piped an grep -v -e 'err:' -v -e 'fixme:', aber das klappt auch nicht, weil dann der Progress Indikator gar nicht mehr auftaucht. Scheinbar funktioniert diese Art von Ausgabe nicht durch eine Pipe an grep.
Was ich jetzt gerne hätte, optimalerweise: Kann ich stdout und stderr von wine bzw. wineconsole selber irgendwie komplett getrennt von stderr und stdout des aufgerufenen Windows Programms behandeln? Oder
muß wine die Streams unbedingt zusammenmischen?
Alternativ: Haben wine oder wineconsole irgendeinen undokumentierten Quiet-Modus, damit er einfach die Pappn hält auf'm Terminal? Bei einigen Tools ist es echt lästig, wenn man die gewollte Ausgabe und das Geschrei von wine mit der Hand auseinanderpflücken muß.
Danke (auch falls es keinen Weg geben sollte)!