2010-08-18 35 views
11

Tôi đang thực hiện các báo cáo in bằng python. Tôi đang thực thi tập lệnh của mình như vậy:Các câu lệnh in bằng Python được đệm với> chuyển hướng đầu ra

python script.py > out.log nohup & 

Các báo cáo in không được hiển thị trong out.log nhưng chương trình hoàn tất ok.

Đó dòng mã là trong một tập tin .sh tôi thực hiện bằng cách làm ./script.sh

Cập nhật: Nhật ký thực hiện được tất cả các dữ liệu nhưng không cho đến khi một số # của các dòng được in. Nó sẽ xuất hiện để được đệm đầu ra.

Trả lời

23

Khi stdout được gửi đến một tty, nó sẽ là dòng đệm và sẽ được flushed mỗi dòng, nhưng khi chuyển hướng đến một tập tin hoặc đường ống nó sẽ được đệm hoàn toàn và sẽ chỉ được flushed định kỳ khi bạn overrun bộ đệm.

Bạn sẽ phải thêm sys.stdout.flush() cuộc gọi sau mỗi dòng nếu bạn muốn đầu ra hiển thị ngay lập tức hoặc tắt hoàn toàn bộ đệm. Xem Disable output buffering cách để làm sau này:

  1. Sử dụng dòng -u lệnh switch
  2. Bọc sys.stdout trong một đối tượng mà xả sau mỗi lần viết
  3. Đặt PYTHONUNBUFFERED env var
  4. sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)
1

Bạn thử:

  1. Chạy nó mà không có sự chuyển hướng và đảm bảo mọi thứ được in như mong đợi
  2. Chạy nó không phải thông qua một kịch bản shell, mà chỉ đơn giản từ một dòng lệnh

?

Các bước này có thể giúp bạn "về nhà" về sự cố.

+0

cảm ơn bạn sẽ thử nó – user420814

+0

# 1 và # 2 đều hoạt động như mong đợi – user420814

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