Làm cách nào để ngăn chặn đầu ra trong IPython Notebook?


113

Làm thế nào để sản lượng có thể stdoutbị triệt tiêu?

Dấu chấm phẩy có thể được sử dụng để nhấn mạnh hiển thị các đối tượng trả về, ví dụ

>>> 1+1
2

>>> 1+1;   # No output!

Tuy nhiên, một hàm in ra stdout không bị ảnh hưởng bởi dấu chấm phẩy.

>>> print('Hello!')
Hello!

>>> MyFunction()
Calculating values...

Làm thế nào để đầu ra từ print/ MyFunctionbị chặn?


đối với hạt nhân iruby chỉ cần thêm nil làm dòng cuối cùng
frenesim

Câu trả lời:


167

Thêm %%capturelàm dòng đầu tiên của ô. ví dụ

%%capture
print('Hello')
MyFunction()

Điều này chỉ đơn giản là loại bỏ đầu ra, nhưng %%capturephép thuật có thể được sử dụng để lưu đầu ra vào một biến - tham khảo tài liệu


2
Có ai biết điều ngược lại của việc nắm bắt %% là gì không? Như trong, làm cách nào để bạn dừng chụp %% trong một ô hay nó được bật cho đến cuối ô?
David Parks

2
Điều cần biết là %%capturechỉ được kích hoạt cho đến khi kết thúc ô và nó phải xuất hiện trước bất kỳ mã nào trong ô. (Vì vậy, dường như không có một cách để uncapture trong một tế bào.)
Arel

Cuộc thảo luận của ICYMI, @David Parks và @ Arel được đề cập đến bởi câu trả lời của @ gwd2 trên trang này về việc sử dụng with io.capture_output() as captured:bạn có thể tinh chỉnh trong một ô để chỉ nắm bắt những gì được chạy trong withngữ cảnh đó .
Wayne

Lưu ý rằng điều này chỉ hoạt động đối với hạt nhân Python (ví dụ: không phải R).
Max Ghenis

90

Giảm sản lượng

Đặt một ;ở cuối dòng để ngăn in đầu ra [ Tài liệu tham khảo ].


4
Điều này không áp dụng cho mã bên trong forvòng lặp. Bất kỳ ý tưởng? Tôi chỉ muốn chặn đầu ra từ các dòng mã cụ thể trong ô, không phải tất cả các dòng. Cảm ơn
Bối rối

16

(tín dụng: https://stackoverflow.com/a/23611571/389812 )

Bạn có thể sử dụng io.capture_output :

from IPython.utils import io

with io.capture_output() as captured:
    MyFunction()

để supress (ví dụ: capture) stdout và stderr cho những dòng đó trong with-statement.


Cảm ơn rất nhiều, điều này khiến tôi phát điên lên - tôi có một chức năng khởi động mà tôi chạy mỗi khi tôi mở một sổ ghi chép có cuộc gọi %autosavevà muốn chặn đầu ra của nó. Tưởng rằng nó sẽ đơn giản - nhưng thật kỳ lạ, contextlib.redirect_stdoutsys.stdout = open(os.devnull, 'w')cả hai đều thất bại (cuối cùng in thêm một dòng trống). Đây phải là câu trả lời được chấp nhận.
Luke Davis

1
Đây là câu trả lời yêu thích của tôi, bởi vì người ta có thể ngăn chặn một số đầu ra trong một ô mà không ngăn chặn tất cả.
Wolpertinger

-5

Nếu ai đó quan tâm đến việc xóa tất cả các đầu ra:

  1. Đi tới ô
  2. Chuyển đến Tất cả đầu ra

Sau đó chọn bất kỳ tùy chọn nào bạn thích.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.