आप IPython नोटबुक में आउटपुट कैसे दबाते हैं?


113

उत्पादन को कैसे stdoutदबाया जा सकता है?

उदाहरण के लिए, लौटे हुए ऑब्जेक्ट के प्रदर्शन को दबाने के लिए एक अर्ध-कोलन का उपयोग किया जा सकता है

>>> 1+1
2

>>> 1+1;   # No output!

हालाँकि, एक फ़ंक्शन जो प्रिंट करने के लिए प्रिंट करता है वह अर्ध-बृहदान्त्र से प्रभावित नहीं होता है।

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

>>> MyFunction()
Calculating values...

कैसे print/ से उत्पादन को MyFunctionदबाया जा सकता है?


विडंबना कर्नेल के लिए बस nil अंतिम पंक्ति के रूप में जोड़ें
frenesim

जवाबों:


167

%%captureसेल की पहली पंक्ति के रूप में जोड़ें । जैसे

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

यह बस आउटपुट को डिस्क्राइब करता है, लेकिन %%captureआउटपुट को वेरिएबल में सेव करने के लिए मैजिक का इस्तेमाल किया जा सकता है - डॉक्स से सलाह लें


2
किसी को पता है कि %% कैप्चर का विपरीत क्या है? जैसे, आप किसी सेल के भीतर %% कैप्चर को कैसे रोकते हैं, या यह सेल के अंत तक सक्षम है?
डेविड पार्क्स

2
जानने के लिए अच्छी बात %%captureकेवल सेल के अंत तक ही सक्षम है, और इसे सेल में किसी भी कोड से पहले दिखाई देना चाहिए। (इसलिए ऐसा प्रतीत होता है कि सेल के भीतर अनचेक करने का कोई तरीका नहीं है।)
Arel

ICYMI, @David Parks और @ Arel की चर्चा इस पृष्ठ पर @ gwd2 के उत्तर से आच्छादित है, जिसके उपयोग के बारे में with io.capture_output() as captured:आप एक सेल के भीतर ठीक-ठीक ट्यून कर सकते हैं कि केवल उस withसंदर्भ में क्या चलाया जाए ।
वेन

ध्यान दें कि यह केवल पायथन कर्नेल (जैसे आर नहीं) के लिए काम करता है।
मैक्स गेनिस

90

उत्पादन को दबाएं

;आउटपुट की छपाई को दबाने के लिए एक पंक्ति के अंत में रखें [ संदर्भ ]।


4
यह 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')दोनों विफल (एक अतिरिक्त रिक्त लाइन को प्रिंट करना)। यह स्वीकृत उत्तर होना चाहिए।
ल्यूक डेविस

1
यह मेरा पसंदीदा उत्तर था, क्योंकि एक सेल में कुछ आउटपुट को दबाए बिना यह सब दबा सकता है।
Wolpertinger

-5

अगर किसी को सभी आउटपुट क्लीयर करने में दिलचस्पी है:

  1. सेल पर जाएं
  2. सभी आउटपुट पर जाएं

फिर आपको जो भी पसंद हो, उसे चुनें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.