2009-08-17 44 views
11

Tôi đang cố gắng chạy một tiến trình trong C# bằng cách sử dụng lớp Process.C# chuyển hướng (đường ống) quá trình đầu ra cho quá trình khác

Process p1 = new process(); 
p1.startinfo.filename = "xyz.exe"; 
p1.startinfo.arguments = //i am building it based on user's input. 
p1.start(); 

Vì vậy, dựa trên đầu vào của người dùng, tôi đang tạo giá trị đối số. Bây giờ tôi có một trường hợp mà tôi phải ống đầu ra của p1 để một quá trình nói grep. vì vậy, về cơ bản tôi đã thử điều này

p1.startinfo.arguments = "-info | grep 1234";

những gì tôi dự định là một cái gì đó giống như xyz.exe -info | grep 1234

nhưng điều này dường như không làm việc trong .net .. Tôi thực sự có thể tạo ra một biến quá trình và chạy "grep" như một riêng biệt quá trình .. Nhưng tôi đã tự hỏi nếu có bất kỳ cách nào để làm như iam cố gắng trên ..

+0

Tôi tìm thấy bài viết trên blog này bao gồm chính xác câu hỏi này: [Sử dụng chuyển hướng đầu ra đường ống trên các lớp Process/ProcessStartInfo ...] (http://weblogs.asp.net/justin_rogers/archive/2004/02/27/ 81370.aspx) –

+0

Nếu bạn không muốn sử dụng CMD, hãy xem thư viện [MedallionShell] (https://github.com/madelson/MedallionShell). Nó làm cho quá trình chuyển hướng dòng (và các khía cạnh khác của quản lý quy trình) đơn giản hơn nhiều. – ChaseMedallion

Trả lời

19

Cách dễ dàng hơn nhiều là chỉ cần sử dụng cmd làm quy trình của bạn.

Process test = new Process(); 
test.StartInfo.FileName = "cmd"; 
test.StartInfo.Arguments = @"/C ""echo testing | grep test"""; 
test.Start(); 

Bạn có thể nắm bắt đầu ra hoặc bất kỳ thứ gì khác bạn muốn như bất kỳ quy trình bình thường nào. Đây chỉ là một bài kiểm tra nhanh mà tôi đã xây dựng, nhưng nó hoạt động outputting thử nghiệm cho giao diện điều khiển vì vậy tôi mong đợi điều này sẽ làm việc cho bất cứ điều gì khác bạn có kế hoạch làm với đường ống. Nếu bạn muốn lệnh để mở thì sử dụng/K thay vì/C và cửa sổ sẽ không đóng khi quá trình kết thúc.

+0

Cảm ơn bạn đã lưu ngày của tôi :) – FatDaemon

+1

Tôi cần phải làm điều tương tự mà không cần cmd trên Linux. Làm thế nào tôi có thể kết nối StreamReader của quá trình nguồn với StreamWriter của quá trình đích? –

+1

và cách thực hiện điều đó trong Linux? :) – knocte

Các vấn đề liên quan