Tôi đang chạy một tệp thi hành C từ Python và tệp thực thi này đôi khi bị phân tách. Khi nó segfaults module subprocess không trả về bất cứ điều gì trong stdout hoặc stderr.Mô-đun con xử lý Python không trả về giá trị stdout trên segfault
Mẫu mã:
import subprocess
proc = subprocess.Popen(['./a.out'], stdin=subprocess.PIPE,
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = proc.communicate()
print 'out: "%s"' % out
print 'err: "%s"' % err
print proc.returncode
Nguồn cho a.out
là:
int main() {
printf("hello world\n");
int x = 1/0;
}
Kết quả của ./a.out
là:
hello world
Floating point exception
Đầu ra của mã Python là (trong Linux , python 2.7):
out: ""
err: ""
-8
Có cách nào để có được đầu ra của tệp thực thi ngay cả khi nó bị lỗi không?
Một phương pháp chung để dịch mã trả về thành chuỗi tin nhắn, cũng sẽ rất tuyệt.
Giải pháp tốt, nếu bạn kiểm soát mã C và có thể thêm lệnh gọi 'setvbuf' vào đó và biên dịch lại. Tôi đã giả định mã C của bên thứ ba mà nó nằm ngoài câu hỏi để sửa đổi. – Celada
Vâng, nếu mã bên thứ ba của bạn không tuôn ra mã vạch của nó trước khi nó bị treo, bạn không thể làm được gì nhiều. – vy32