2012-06-07 31 views
5

Tôi đang làm việc trên Linux với mã thực hiện cuộc gọi system() để chạy chương trình python. Tôi quan tâm đến giá trị trả về bởi lời gọi hàm này để hiểu cách thực hiện chương trình python.Giá trị trả về của cuộc gọi hàm system() trong C++, được sử dụng để chạy chương trình Python

Cho đến nay, tôi đã tìm thấy 3 kết quả:

  • Khi quá trình python hoàn tất thành công, giá trị trả về bởi hệ thống() là 0

  • Khi quá trình trăn bị giết giữa thực hiện (sử dụng kill -9 pid), giá trị trả về bởi hệ thống() là 9

  • Khi quá trình python không thành công do tham số không chính xác, giá trị trả về bởi hệ thống() là 512

Điều này không phù hợp với những gì tôi đã đọc về chức năng system().

Hơn nữa, mã cho chương trình python được gọi cho thấy nó thoát với sys.exit(2) khi gặp phải bất kỳ lỗi nào và sys.exit(0) khi thực thi hoàn tất thành công.

Có ai liên hệ hai điều này không? Tôi có giải thích giá trị trả về sai không? Có một số xử lý Linux có liên quan mà có các đối số của các chức năng sys.exit() của chương trình python và trả về giá trị của system() dựa trên nó?

+1

Bạn gọi chương trình python như thế nào? tức là với 'hệ thống ("/usr/bin/env python/path/to/script ");'? – mkb

+0

'hệ thống (" python progname.py arg1 arg2 arg2 ");' Python đã được thêm vào PATH –

Trả lời

9

Mã thoát của chương trình bạn gọi có thể được tìm nạp với WEXITSTATUS(status) theo manual page. Ngoài ra, hãy xem trang hướng dẫn sử dụng cho wait.

int status = system("/path/to/my/program"); 
if (status < 0) 
    std::cout << "Error: " << strerror(errno) << '\n'; 
else 
{ 
    if (WIFEXITED(status)) 
     std::cout << "Program returned normally, exit code " << WEXITSTATUS(status) << '\n'; 
    else 
     std::cout << "Program exited abnormaly\n"; 
} 
+0

Cách thực hiện điều đó trong Windows 7? Tệp tiêu đề trong đó WIFEXITED được định nghĩa là gì? – CroCo

+0

@CroCo Windows không có điều tương tự khi nói đến mã thoát, đó là điều [POSIX] (http://en.wikipedia.org/wiki/POSIX). –

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