Fortschrittsanzeige bei 7z wird nicht in Datei ausgegeben

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Richard
Beiträge: 639
Registriert: 11.10.2012 14:18:37
Lizenz eigener Beiträge: GNU General Public License

Fortschrittsanzeige bei 7z wird nicht in Datei ausgegeben

Beitrag von Richard » 26.01.2024 22:07:38

Hallo,

mir ist schon bei einigen Programmen aufgefallen, dass die Art der ausgegebenen Informationen scheinbar unterschiedlich sind, z. B. bei 7z. Wenn ich da eine Datei entpacke bekomme ich 1.) Angaben zur Programmversion und 2.) zum Archiv.

Code: Alles auswählen

7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=de_DE.UTF-8,Utf16=on,HugeFiles=on,64 bits,12 CPUs AMD Ryzen 5 4600G with Radeon Graphics (860F01),ASM,AES-NI)

Scanning the drive for archives:
1 file, 2793470626 bytes (2665 MiB)             

Extracting archive: /media/data/archiv.7z
--
Path = /media/data/archiv.7z
Type = 7z
Physical Size = 2793470626
Headers Size = 154
Method = LZMA2:24
Solid = -
Blocks = 1
Wenn der Vorgang läuft wird darunter angezeigt

Code: Alles auswählen

10% - archiv-inhalt.ext
Breche ich das ganze mit STRG+C verschwindet der letzte Teil und es erscheint

Code: Alles auswählen

Archives with Errors: 1
Break signaled
Ich bin nun davon ausgegangen, dass wenn ich das ganze in eine Datei umleite der Inhalt vollständig erhalten bleibt. In der Datei fehlt aber die Fortschrittsanzeige vollständig. Nutzt hier 7z noch etwas anderes als die Standard-Ausgabe? Wenn ich den Standard-Fehler-Kanal zu stdout umleite ändert das nichts. Über welchen Kanal wird die Fortschrittsanzeige ausgegeben?

Benutzeravatar
Meillo
Moderator
Beiträge: 8818
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Fortschrittsanzeige bei 7z wird nicht in Datei ausgegeben

Beitrag von Meillo » 26.01.2024 22:12:14

Vermutlich wird das direkt ins Terminal-Device (/dev/tty) geschrieben.
Use ed once in a while!

Richard
Beiträge: 639
Registriert: 11.10.2012 14:18:37
Lizenz eigener Beiträge: GNU General Public License

Re: Fortschrittsanzeige bei 7z wird nicht in Datei ausgegeben

Beitrag von Richard » 26.01.2024 23:23:26

Kann man das so umleiten, dass es mit grep bearbeitet werden kann?

tobo
Beiträge: 1996
Registriert: 10.12.2008 10:51:41

Re: Fortschrittsanzeige bei 7z wird nicht in Datei ausgegeben

Beitrag von tobo » 27.01.2024 00:04:21

Nach "progress" suchen in der manpage kann womöglich helfen:

Code: Alles auswählen

7z ... -bsp2 | grep %

Richard
Beiträge: 639
Registriert: 11.10.2012 14:18:37
Lizenz eigener Beiträge: GNU General Public License

Re: Fortschrittsanzeige bei 7z wird nicht in Datei ausgegeben

Beitrag von Richard » 27.01.2024 20:20:53

Ich kenne das Verhalten von anderen Apps auch. Ist es möglichen diesen Output nach /dev/tty umzuleiten? Das wäre als generelle Lösung mal interessant.

Benutzeravatar
Meillo
Moderator
Beiträge: 8818
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Fortschrittsanzeige bei 7z wird nicht in Datei ausgegeben

Beitrag von Meillo » 27.01.2024 20:45:08

tobo hat geschrieben: ↑ zum Beitrag ↑
27.01.2024 00:04:21
Nach "progress" suchen in der manpage kann womöglich helfen:

Code: Alles auswählen

7z ... -bsp2 | grep %
Da fehlt noch eine Kleinigkeit: entweder du musst `-bsp1' verwenden oder `2>&1', damit die Ausgabe durch die Pipe geht.
Use ed once in a while!

tobo
Beiträge: 1996
Registriert: 10.12.2008 10:51:41

Re: Fortschrittsanzeige bei 7z wird nicht in Datei ausgegeben

Beitrag von tobo » 27.01.2024 21:18:45

Meillo hat geschrieben: ↑ zum Beitrag ↑
27.01.2024 20:45:08
tobo hat geschrieben: ↑ zum Beitrag ↑
27.01.2024 00:04:21
Nach "progress" suchen in der manpage kann womöglich helfen:

Code: Alles auswählen

7z ... -bsp2 | grep %
Da fehlt noch eine Kleinigkeit: entweder du musst `-bsp1' verwenden oder `2>&1', damit die Ausgabe durch die Pipe geht.
Ich hatte das kurz probiert und da hatte das (2 only) funktioniert. Das war aber wirklich "kurz" getestet und 7zip ist auch schon wieder deinstalliert. Jedenfalls hatte ich sicher kein |& etc. benutzt!
Richard hat geschrieben: ↑ zum Beitrag ↑
27.01.2024 20:20:53
Ich kenne das Verhalten von anderen Apps auch. Ist es möglichen diesen Output nach /dev/tty umzuleiten? Das wäre als generelle Lösung mal interessant.
Wenn tty(3) geöffnet ist, dann kannst du z.B. sowas machen

Code: Alles auswählen

echo tty >/dev/tty3
und Ausgabe produzieren. Soll die Ausgabe dort augeführt werden, dann geht wohl so was:

Code: Alles auswählen

echo tty | sh >/dev/tty3
Aber irgendwie verstehe ich immer weniger, was du überhaupt willst...


EDIT: Gerade 7zip nochmal installiert und geschaut - das funktioniert so überhaupt nicht. Die 2 bezieht sich auf den Fortschritt, nicht auf die Fehler (soweit ok, siehe manpage). Das grep könnte man aber fast beliebig durch jeden anderen unnützen Befehl ersetzen (z.B. ls).

Richard
Beiträge: 639
Registriert: 11.10.2012 14:18:37
Lizenz eigener Beiträge: GNU General Public License

Re: Fortschrittsanzeige bei 7z wird nicht in Datei ausgegeben

Beitrag von Richard » 27.01.2024 22:04:41

Ich will aus der sehr unübersichtlichen Ausgabe 2 Sachen herausziehen:

Code: Alles auswählen

<name der datei die gerade entpackt wird>
Fortschrittsanzeige
Mein Problem: Das ganze ist nicht "das gleiche". Der Teil der Ausgabe der den Dateinamen enthält lässt sich normal mit

Code: Alles auswählen

program <commands> | grep wasauchimmer
herausfiltern. Standardmäßig ließt sich die Fortschrittsanzeige überhaupt nicht mit grep extrahieren. Durch -bsp2 geht das, wie Meillo richtig beschrieben hat, mit "| grep %" zu pipen.

Was ich suche - und zwar nicht nur für 7z - ist eine Möglichkeit einfach alles was ausgespuckt wird als stdout auszugeben. Einfaches alles in einem Paket, nicht als Datei, sondern als stdout.

tobo
Beiträge: 1996
Registriert: 10.12.2008 10:51:41

Re: Fortschrittsanzeige bei 7z wird nicht in Datei ausgegeben

Beitrag von tobo » 27.01.2024 22:12:35

Richard hat geschrieben: ↑ zum Beitrag ↑
27.01.2024 22:04:41
Durch -bsp2 geht das, wie Meillo richtig beschrieben hat, mit "| grep %" zu pipen.
1. habe ich diesen Blödsinn geschrieben und 2. habe ich bereits geschrieben, dass es so eben nicht geht. Siehe:

Code: Alles auswählen

7z ... -bsp2 | false
// oder
7z ... -bsp2 | grep Koalabär
Zuletzt geändert von tobo am 27.01.2024 22:15:04, insgesamt 1-mal geändert.

Richard
Beiträge: 639
Registriert: 11.10.2012 14:18:37
Lizenz eigener Beiträge: GNU General Public License

Re: Fortschrittsanzeige bei 7z wird nicht in Datei ausgegeben

Beitrag von Richard » 28.01.2024 10:02:27

Doch, das geht, aber auf eine komische Art die ich nicht verstehe. Die Ausgabe sieht ohne bsp2 so aus:

Code: Alles auswählen

7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=de_DE.UTF-8,Utf16=on,HugeFiles=on,64 bits,12 CPUs AMD Ryzen 5 4600G with Radeon Graphics (860F01),ASM,AES-NI)

Scanning the drive for archives:
1 file, 828634084 bytes (791 MiB)               

Extracting archive: /media/data/archiv.7z
--
Path = /media/data/archiv.7z
Type = 7z
Physical Size = 828634084
Headers Size = 138
Method = LZMA2:24
Solid = -
Blocks = 1
grep kann auf alles oberhalb der beiden Striche (--) angewendet werden. Ein "grep Path" tut nichts, auch kein "grep %"

Mit bsp2 sieht die Ausgabe genauso aus, nur geht jetzt "grep %". Es wird dann nur die Fortschrittsanzeige angezeigt. Etwas anderes geht mir grep nicht. Interessant ist, dass bei "grep Path" dennoch nur die Fortschrittsanzeige angezeigt wird.

Antworten