Estrazione di un file 7-Zip “in silenzio” - l'opzione della riga di comando

StackOverflow https://stackoverflow.com/questions/3774278

  •  04-10-2019
  •  | 
  •  

Domanda

Voglio estrarre un 7-Zip archivio in uno script Python. Funziona bene, tranne che sputa fuori i dettagli di estrazione (che è enorme nel mio caso).

C'è un modo per evitare questo verbose informazioni durante l'estrazione? Non ho trovato alcuna opzione della riga di comando "silenziosa" per 7z.exe.

è il mio comandamento

7z.exe -o some_dir x some_archive.7z
È stato utile?

Soluzione

Una possibilità potrebbe essere quella di deporre le uova il processo figlio con popen , quindi la sua uscita sarà tornare al genitore da elaborare / visualizzata (se lo si desidera), oppure completamente ignorato (creare l'oggetto popen con stdout=PIPE e stderr=PIPE per essere in grado di recuperare l'output del bambino).

Altri suggerimenti

Ho appena imbattuto in questo durante la ricerca per lo stesso, ma ho risolto io stesso! Supponendo che il comando viene elaborato con Windows / DOS, una soluzione più semplice è quella di cambiare il vostro comando:

7z.exe -o some_dir x some_archive.7z > nul

Cioè, direttamente l'output in un file vuoto, piuttosto che sullo schermo.

Oppure si potrebbe inviare l'output al DOS "trovare" il comando per i dati di uscita specifici solo, cioè,

7z.exe -o some_dir x some_archive.7z | FIND "ing archive"

Questo sarebbe solo causare il seguente output.

  

La creazione archivio some_archive.7z

o

  

Aggiornamento archivio some_archive.7z **


La mia soluzione finale era quello di cambiare l'ordine di

... some_archive.7z | FIND /V "ing  "

Nota doppio spazio dopo 'ing'. Ciò ha provocato il seguente output.

7-Zip 9.20  Copyright (c) 1999-2010 Igor Pavlov  2010-11-18

Scanning

Updating some_archive.7z


Everything is Ok

Questo rimuove l'elaborazione singolo file, ma produce una sintesi del funzionamento generale, a prescindere dal tipo di operazione.

come hanno detto, per nascondere la maggior parte dei messaggi sullo schermo di riempimento è possibile utilizzare ... some_archive.7z | FIND / V "Compressione", ma che "trovare" sarebbe anche rimuovere i messaggi di errore che ha avuto quella parola. Non sarebbe stata avvertita. Quel "Find" può anche essere necessario cambiare a causa di una versione più recente di 7-Zip.

7-zip è un forzato verbose uscita, nessuna modalità di silenzio, miscele stderr e stdout (*), non salva i permessi Unix, ecc Quelle anti-standard comportamenti insieme mettere "7-zip" in un brutto posto quando essere paragonato a "tar + bzip2" o "zip", per esempio.

(*) "a monte (Igor Pavlov) non vuole fare uscite diverse per i messaggi, anche se lui è stato chiesto più volte di farlo :(" http://us.generation-nt.com/answer/bug-346463-p7zip-stdout-stderr- aiuto-166693561.html - "Igor Pavlov non vuole modificare questo comportamento" http://sourceforge.net/tracker/?func=detail&aid=1075294&group_id=111810&atid=660493

7zip non ha una "tranquilla" esplicita o in modalità "silenziosa" per l'estrazione della riga di comando.

Una possibilità potrebbe essere quella di deporre le uova il processo figlio con popen, quindi la sua uscita tornerà al genitore da lavorare / visualizzata (se lo si desidera), oppure completamente ignorato (creare l'oggetto popen con stdout = PIPE e stderr = PIPE per essere in grado di recuperare l'output del bambino).

In caso contrario, provare a fare questo:

%COMSPEC% /c "%ProgramFiles%\7-Zip\7z.exe" ...

Ampliando la risposta @ Matteo s' e questa risposta https: / /superuser.com/questions/194659/how-to-disable-the-output-of-7-zip  Sto utilizzando FINDSTR invece di trovare in modo da poter linee catena più per escludere e righe vuote così:

7za.exe a test1.zip .\foldertozip | FINDSTR /V /R /C:"^Compressing  " /C:"Igor Pavlov" /C:"^Scanning$" /C:"^$" /C:"^Everything is Ok$"
  • / V: exclude
  • / R: regex
  • / C: "^ Compressione": Inizio della linea, Compressione, 2 posti
  • / C: "^ scansione $": la parola di scansione sulla propria su una linea (begining / fine)
  • / C: "^ $": un'all'inizio e alla fine, senza nulla in mezzo, vale a dire, una riga vuota

sto usando / C in modo che uno spazio è uno spazio, altrimenti è un separatore tra più parole ha dovuto escludere come in questa versione più semplice:

FINDSTR /V "Compressing Pavlov Scanning Everytyhing"

(esistono gli stessi avvertimenti, se i cambiamenti formulazione in una nuova versione, o se una linea utile inizia con la parola "compressione", non funzionerà come previsto).

Il | FIND è una buona alternativa per mostrare quello che è successo senza visualizzare il testo insignificante.

Se si sta eseguendo 7-zip.exe da PowerShell, e si desidera solo per vedere gli errori, allora si potrebbe provare qualcosa di simile:

7-zip.exe u <Target> <Source> | Select-String "Error" -Context 10

Questo mostrerà solo la linea di "Errore" messaggio e le circostanti 10 righe (o qualunque numero) per catturare l'uscita di errore specifico.

Esaminando fonte 7zip ho trovato interruttore -ba nascosto che sembra fare il trucco. Purtroppo non è finito. Sono riuscito a farlo funzionare con diverse modifiche di fonti, ma è solo un hack. Se qualcuno è interessato, la variabile opzione si chiama options.EnableHeaders e sono necessarie le modifiche nel file di CPP/7zip/UI/Console/Main.cpp. In alternativa si può colpire l'autore di 7Zip per terminare la funzione in inseguitore . Ci sono diverse richieste su questo e uno di loro è qui .

7-Zip non ha una tale opzione. Inoltre le linee stampate ad ogni file compresso si suppone di visualizzazione nello stesso punto senza ritorno a capo, cancellando il precedente, che ha un effetto fresco. Purtroppo, in alcuni contesti (Jenkins ...) ha prodotto diverse linee ?? inondando il console.

NUL (finestre) è forse una soluzione.

7-zip.exe -o some_dir x some_archive.7z>NUL

È possibile interrompere 7-Zip da visualizzare i prompt utilizzando l'interruttore -y. Ciò rispondere sì a tutte le richieste. Utilizzare questo solo quando si è sicuri.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top