Tôi đang viết một chương trình C++ thực thi và xuất ra (trong thời gian thực) một kịch bản lệnh shell, makefile hoặc chỉ một chương trình khác. Tuy nhiên, tôi muốn chương trình của tôi trở lại khác nhau khi có lỗi hoặc không có lỗi.Cách chụp exit_code và stderr của lệnh được chạy trong C++?
#include "execxi.h"
using namespace std;
int execXI::run(string command)
{
FILE *in;
char buff[512];
// is this the check for command execution exited with not 0?
if(!(in = popen(command.c_str(), "r"))){
// I want to return the exit code and error message too if any
return 1;
}
// this part echoes the output of the command that's executed
while(fgets(buff, sizeof(buff), in)!=NULL){
cout << buff;
}
pclose(in);
return 0;
}
là những gì tôi có cho đến nay.
Hãy nói rằng kịch bản này chạy make
để xây dựng một chương trình và nó đã cho một lỗi như vậy
on_target_webkit_version out/Release/obj/gen/webkit_version.h
Traceback (most recent call last):
File "../build/webkit_version.py", line 107, in <module>
sys.exit(main())
File "../build/webkit_version.py", line 103, in main
return EmitVersionHeader(*sys.argv[1:])
File "../build/webkit_version.py", line 86, in EmitVersionHeader
webkit_revision = GetWebKitRevision(webkit_dir, version_file)
File "../build/webkit_version.py", line 60, in GetWebKitRevision
version_info = lastchange.FetchVersionInfo(
AttributeError: 'module' object has no attribute 'FetchVersionInfo'
make: *** [out/Release/obj/gen/webkit_version.h] Error 1
Có thể cho tôi biết rằng điều này đã thoát với lỗi?
Điều đó có thoát với mã
else than 0
vì đó là lỗi không?Phần cuối cùng có xuất hiện trong
stderr
không?
Xét rằng make
thoát với mã không 0
, chúng ta hãy nói 1
, và nó ra trong stderr
là nó không thể cho tôi để nắm bắt các mã lối ra và thông báo lỗi cuối cùng?
Làm cách nào tôi có thể nắm bắt mã thoát và stderr
sau khi xuất kết quả của chương trình và trả lại exit code
/stderr
trong chức năng?
pclose trả về một trạng thái thoát. –
http://jineshkj.wordpress.com/2006/12/22/how-to-capture-stdin-stdout-and-stderr-of-child-program/ –