Come faccio a catturare il testo della riga di comando che non viene inviato a stdout?

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

  •  18-09-2019
  •  | 
  •  

Domanda

Sto usando il LAME riga di comando encoder mp3 in un progetto. Voglio essere in grado di vedere ciò che qualcuno sta utilizzando la versione. se ho appena eseguo lame.exe senza paramaters io ottenere, ad esempio:

C:\LAME>LAME.exe
LAME 32-bits version 3.98.2 (http://www.mp3dev.org/)

usage: blah blah
blah blah

C:\LAME>

Se provo reindirizzare l'output in un file di testo utilizzando> per un file di testo il file di testo è vuoto. Dove si trova questo accessibile il testo da quando si esegue utilizzando System.Process in C #?

È stato utile?

Soluzione

E 'probabilmente utilizzando stderr. cmd.exe non consente di reindirizzare stderr, e l'unico modo che io abbia mai reindirizzato è con uno strumento DJGPP.

Altri suggerimenti

Può essere visualizzato allo stderr invece di stdout. Puoi reindirizzamento stderr facendo:

LAME.exe 2> textfile.txt

Se questo vi sono riportate le informazioni, quindi LAME è l'output nel flusso di errore standard. Se si scrive un wrapper in C #, è possibile reindirizzare il errore e uscita flussi standard da ProcessStartInfo .

        System.Diagnostics.Process proc = new System.Diagnostics.Process();
        proc.EnableRaisingEvents = false;
        proc.StartInfo.FileName = @"C:\LAME\LAME.exe";
        proc.StartInfo.RedirectStandardError = true;
        proc.StartInfo.UseShellExecute = false;

        proc.Start();
        string output = proc.StandardError.ReadToEnd();


        proc.WaitForExit();

        MessageBox.Show(output);

funzionato. ringrazia tutti!

Potrebbe essere inviato a stderr, avete provato questo?

processo .StandardError .

Provalo usando

C:\LAME>LAME.exe 2> test.txt
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top