Bagaimana cara menjalankan aplikasi konsol dari aplikasi .NET saya dan menangkap semua output yang dihasilkan di konsol?
(Ingat, saya tidak ingin menyimpan informasi terlebih dahulu dalam file dan kemudian mendaftar ulang karena saya ingin menerimanya sebagai siaran langsung.)
Jawaban:
Ini dapat dengan mudah dicapai menggunakan properti ProcessStartInfo.RedirectStandardOutput . Sampel lengkap terdapat dalam dokumentasi MSDN tertaut; satu-satunya peringatan adalah bahwa Anda mungkin harus mengarahkan aliran kesalahan standar juga untuk melihat semua output aplikasi Anda.
sumber
Console.Write
saja.Ini sedikit lebih baik dari jawaban yang diterima dari @mdb . Secara khusus, kami juga menangkap output kesalahan dari proses. Selain itu, kami menangkap keluaran ini melalui acara karena
ReadToEnd()
tidak berfungsi jika Anda ingin menangkap kedua kesalahan dan output biasa. Butuh waktu untuk membuat pekerjaan ini karena sebenarnya juga memerlukanBeginxxxReadLine()
panggilan setelahStart()
.Cara asinkron:
sumber
Gunakan ProcessInfo.RedirectStandardOutput untuk mengarahkan ulang output saat membuat proses konsol Anda.
Kemudian Anda dapat menggunakan Process.StandardOutput untuk membaca output program.
Tautan kedua memiliki kode contoh cara melakukannya.
sumber
ConsoleAppLauncher adalah pustaka sumber terbuka yang dibuat khusus untuk menjawab pertanyaan itu. Ini menangkap semua output yang dihasilkan di konsol dan menyediakan antarmuka sederhana untuk memulai dan menutup aplikasi konsol.
Acara ConsoleOutput dipecat setiap kali ketika baris baru ditulis oleh konsol ke output standar / kesalahan. Garis-garis antrian dan dijamin untuk mengikuti urutan keluaran.
Juga tersedia sebagai paket NuGet .
Contoh panggilan untuk mendapatkan output konsol penuh:
Sampel dengan umpan balik langsung:
sumber
Saya telah menambahkan sejumlah metode pembantu ke Platform O2 (proyek Sumber Terbuka) yang memungkinkan Anda dengan mudah membuat skrip interaksi dengan proses lain melalui output dan input konsol (lihat http://code.google.com/p/o2platform/ source / browse / trunk / O2_Scripts / APIs / Windows / CmdExe / CmdExeAPI.cs )
Juga bermanfaat bagi Anda mungkin API yang memungkinkan tampilan output konsol dari proses saat ini (dalam kontrol yang ada atau jendela sembulan). Lihat posting blog ini untuk detail lebih lanjut: http://o2platform.wordpress.com/2011/11/26/api_consoleout-cs-inprocess-capture-of-the-console-output/ (blog ini juga berisi detail tentang cara mengonsumsi output konsol dari proses baru)
sumber
Saya membuat versi reaktif yang menerima panggilan balik untuk stdOut dan StdErr.
onStdOut
danonStdErr
dipanggil secara tidak sinkron,segera setelah data tiba (sebelum proses keluar).
Contoh penggunaan
Berikut ini akan berjalan
executable
denganargs
dan dicetakke konsol.
sumber
Dari PythonTR - Python Programcıları Derneği, e-kitap, yang disediakan :
sumber
Ditambahkan
process.StartInfo.**CreateNoWindow** = true;
dantimeout
.sumber
StandardOutput.ReadToEnd()
tidak akan kembali ke pernyataan berikutnya sampai akhir aplikasi. jadi batas waktu Anda di WaitForExit (timeoutMilliseconds) tidak berfungsi! (kode Anda akan hang!)