كيف يمكنني التقاط نص سطر الأوامر الذي لا يتم إرساله إلى Stdout؟

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

  •  18-09-2019
  •  | 
  •  

سؤال

أنا أستخدم سطر الأوامر العرجاء تشفير MP3 في مشروع. أريد أن أكون قادرا على معرفة الإصدار الذي يستخدمه شخص ما. إذا قمت فقط بتنفيذ LAME.EXE مع عدم وجود Paramaters، فهذاما:

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

usage: blah blah
blah blah

C:\LAME>

إذا حاولت إعادة توجيه الإخراج إلى ملف نصي باستخدام> ملف نصي، فإن الملف النصي فارغ. أين يتم الوصول إلى هذا النص عند تشغيله باستخدام النظام .process في C #؟

هل كانت مفيدة؟

المحلول

ربما يستخدم Stderr. لا يسمح لك Cmd.exe بإعادة توجيه Stderr، والطريقة الوحيدة التي قمت بإعادة توجيهها من قبل مع أداة DJGPP.

نصائح أخرى

قد يكون الإخراج إلى Stderr بدلا من Stdout. يمكنك إعادة توجيه Stderr. عن طريق القيام:

LAME.exe 2> textfile.txt

إذا كان هذا يظهر لك معلومات، ثم إخراج عرجاء إلى دفق الخطأ القياسي. إذا كتبت غلاف في C #، يمكنك إعادة توجيه خطأ تقليدي وتدفقات الإخراج من 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);

عمل. شكرا لكم جميعا!

قد يتم إرسالها إلى Stderr، هل جربت ذلك؟

الدفع process.standardError..

جربه باستخدام

C:\LAME>LAME.exe 2> test.txt
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top