2011-08-01 30 views
16

Tôi đang cố gắng sử dụng popen() để bắt stderr của một cuộc gọi, nhưng tất nhiên nó dường như không được làm điều đó. Bất kỳ ý tưởng?c popen sẽ không bắt stderr

Mã của tôi trông nhiều hơn hoặc ít hơn như thế này:

popen("nedit", "r"); 

Nhưng tôi nhận được tất cả các rác thải này về phi utf8 trên màn hình của tôi ...

Trả lời

30

popen mang đến cho bạn một tập tin xử lý trên quá trình 'stdout, không phải stderr của nó. Đối số đầu tiên của nó được hiểu như là một lệnh shell, vì vậy bạn có thể làm chuyển hướng trong đó:

FILE *p = popen("prog 2>&1", "r"); 

hoặc, nếu bạn không muốn stdout ở tất cả,

FILE *p = popen("prog 2>&1 >/dev/null", "r"); 

(Bất kỳ tập tin khác ngoài /dev/null là chấp nhận được cũng)

+0

Nếu chúng ta không muốn đầu ra ở tất cả, chúng ta không thể làm 'popen (...," w ");' thay vào đó? –

1

Nếu bạn muốn loại bỏ tất cả các thông báo lỗi, sau đó bạn có thể sử dụng:.

popen("nedit 2>/dev/null", "r"); 
Các vấn đề liên quan