คุณระงับเอาต์พุตใน IPython Notebook ได้อย่างไร?


115

stdoutจะระงับเอาต์พุตได้อย่างไร?

สามารถใช้อัฒภาคเพื่อ supress การแสดงวัตถุที่ส่งคืนตัวอย่างเช่น

>>> 1+1
2

>>> 1+1;   # No output!

อย่างไรก็ตามฟังก์ชันที่พิมพ์ไปยัง stdout จะไม่ได้รับผลกระทบจากอัฒภาค

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

>>> MyFunction()
Calculating values...

ผลลัพธ์จากprint/ MyFunctionถูกระงับได้อย่างไร?


สำหรับเคอร์เนล iruby เพียงเพิ่ม nil เป็นบรรทัดสุดท้าย
frenesim

คำตอบ:


170

เพิ่ม%%captureเป็นบรรทัดแรกของเซลล์ เช่น

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

นี่เป็นเพียงการละทิ้งผลลัพธ์ แต่%%captureสามารถใช้เวทมนตร์เพื่อบันทึกผลลัพธ์ลงในตัวแปรได้โปรดดูเอกสาร


2
ใครรู้บ้างว่าตรงข้ามกับ %% capture คืออะไร? เช่นเดียวกับคุณจะหยุดการจับ %% ภายในเซลล์ได้อย่างไรหรือเปิดใช้งานจนกว่าจะสิ้นสุดเซลล์
David Parks

2
สิ่งที่ควรรู้คือ%%captureเปิดใช้งานจนถึงจุดสิ้นสุดของเซลล์เท่านั้นและจะต้องปรากฏก่อนโค้ดใด ๆ ในเซลล์ (ดูเหมือนว่าจะไม่มีทางที่จะแยกออกจากเซลล์ได้)
Arel

การสนทนาของ ICYMI, @David Parks และ @ Arel ครอบคลุมโดยคำตอบของ @ gwd2 ในหน้านี้เกี่ยวกับการใช้with io.capture_output() as captured:คุณสามารถปรับแต่งภายในเซลล์เพื่อจับเฉพาะสิ่งที่ทำงานในwithบริบทนั้น
Wayne

โปรดทราบว่าสิ่งนี้ใช้ได้กับเมล็ด Python เท่านั้น (เช่นไม่ใช่ R)
Max Ghenis

93

ปราบปรามเอาต์พุต

วาง;ที่ท้ายบรรทัดเพื่อระงับการพิมพ์เอาต์พุต [ อ้างอิง ]


6
สิ่งนี้ไม่ได้มีไว้สำหรับรหัสภายในforลูป ความคิดใด ๆ ? ฉันต้องการระงับเอาต์พุตจากโค้ดบรรทัดใดบรรทัดหนึ่งในเซลล์เท่านั้นไม่ใช่ทุกบรรทัด ขอบคุณ
สับสน

16

(เครดิต: https://stackoverflow.com/a/23611571/389812 )

คุณสามารถใช้io.capture_output :

from IPython.utils import io

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

เพื่อกด (เช่นการจับภาพ) stdout และ stderr สำหรับบรรทัดเหล่านั้นภายในไฟล์with-statement.


ขอบคุณมากสิ่งนี้ทำให้ฉันแทบคลั่ง - ฉันมีฟังก์ชั่นเริ่มต้นที่ฉันเรียกใช้ทุกครั้งที่เปิดโน้ตบุ๊กที่โทรเข้า%autosaveและต้องการระงับเอาต์พุต คิดว่ามันจะง่าย - แต่แปลกcontextlib.redirect_stdoutและsys.stdout = open(os.devnull, 'w')ทั้งคู่ล้มเหลว (จบลงด้วยการพิมพ์บรรทัดว่างเพิ่มเติม) นี่ควรเป็นคำตอบที่ได้รับการยอมรับ
Luke Davis

1
นี่เป็นคำตอบที่ฉันชอบมากเพราะเราสามารถระงับเอาต์พุตบางส่วนในเซลล์ได้โดยไม่ต้องระงับทั้งหมด
Wolpertinger

-5

หากใครสนใจที่จะล้างผลลัพธ์ทั้งหมด:

  1. ไปที่เซลล์
  2. ไปที่ผลลัพธ์ทั้งหมด

จากนั้นเลือกตัวเลือกที่คุณต้องการ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.