टर्मिनल प्रॉम्प्ट के बिना IPython सत्र से कॉपी कैसे करें




copying (4)

आप अपने सत्र से दिलचस्प भागों को निकालने के लिए %history जादू का उपयोग कर सकते हैं। उन्हें कबाड़ के बिना टर्मिनल में दिखाया जाएगा।

उदाहरण

In [1]: import numpy as np    
In [2]: a = np.random(10)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-2-83ce219ad17b> in <module>()
----> 1 a = np.random(10)

TypeError: 'module' object is not callable

In [3]: a = np.random.random(10)
In [4]: for i in a:
   ...:     print(i)
   ...:     
0.688626523886
[...]
0.341394850998

अगर मैं सत्र के एक हिस्से को ऊपर बचाना चाहता हूं तो मैं उपयोग कर सकता हूं:

In [5]: %history 1 3-4

import numpy as np
a = np.random.random(10)
for i in a:
    print(i)

ऊपर दिए गए उदाहरण में, मैंने उन सभी आदेशों को इकट्ठा करने के लिए %history 1 3-4 का उपयोग किया, जिन्हें मैं रखना चाहता हूं और जिन्हें मुझे ज़रूरत नहीं है उन्हें छोड़ देना चाहिए (पंक्ति 2, त्रुटि वाला)। अब आपके पास अपने सत्र का संस्करण है जिसे अच्छी तरह से कॉपी किया जा सकता है।

फाइल लिखना

पैरामीटर के रूप में -f FILENAME का उपयोग करके फ़ाइल में सीधे भी लिख सकते हैं।

In [8]: %history 1 3-4 -f /tmp/foo.py

हालांकि सावधान रहें, यह मौजूदा फ़ाइलों को अधिलेखित कर देगा । अधिक विवरण %history जादू के प्रलेखन में पाया जा सकता है।

अक्सर, मेरे वर्कफ़्लो में IPython शेल में डेटा की सफाई / मंजन करना शामिल होता है। यह टर्मिनल इंटरफ़ेस के सभी शानदार उन्नयन के साथ IPython संस्करण 5.0 के बाद से विशेष रूप से अद्भुत हो गया है । तो, मान लें कि मैं असंरचित डेटा के कुछ टुकड़े को छिड़कने का प्रयास करता हूं:

In [11]: for i, (num, header, txt) in enumerate(data):
    ...:     header = [e.strip() for e in header.strip().split('\n')]
    ...:     header[4] = header[4].strip(',').split(',')
    ...:     data[i] = (num, header, txt)
    ...:

शानदार, यह काम करता है! लेकिन अब, मैं वास्तव में इसे अपने संपादक में एक स्क्रिप्ट में जोड़ना चाहूंगा। यदि मैं अपने टर्मिनल से कॉपी और पेस्ट करता हूं, तो मैं बाईं तरफ के सभी कबाड़ को पकड़ लेता हूं। मैं एक संपादक में इसे आसानी से कम-से-कम साफ कर सकता हूं, लेकिन यह बहुत अच्छा होगा यदि मैं माउस से बिना छुए टर्मिनल पर अपने क्लिपबोर्ड पर कोड को सीधे कॉपी कर सकता हूं और बिना अतिरिक्त सामान को हड़प सकता हूं। क्या IPython में ऐसी कार्यक्षमता है?


इसलिए, मैंने आखिरकार एक महान समाधान ढूंढ लिया है जो अनिवार्य रूप से वही है जो मैं चाहता था: आईपीथॉन में वीआई मोड का उपयोग करें। संस्करण 5 पर, इसके लिए यह आवश्यक है:

$ ipython --TerminalInteractiveShell.editing_mode=vi

अब मैं उपयोगी vi-like विजुअल मोड का उपयोग कर सकता हूं और मुझे जो कुछ भी चाहिए, उसे yank कर सकता हूं!

जो मेरे .bash_profile / .bash_rc में निम्नलिखित नए उपनाम की ओर जाता है:

alias vpython='ipython --TerminalInteractiveShell.editing_mode=vi'

मैजिक कमांड को save [ documentation ] उन इनपुट लाइनों को सेव करता है, जिन्हें आप फाइल करना चाहते हैं; -a विकल्प "एपेंड" मोड के लिए है ताकि फ़ाइल को अधिलेखित करने के बजाय फ़ाइल के अंत में लाइनें जोड़ी जाएं। मैं इसका हर समय उपयोग करता हूं।

अपने उदाहरण के साथ:

%save -a myfile.py 11
# the '%' is not necessary
save -a myfile.py 11

तब आप IPython में कोडिंग रख सकते हैं।

जब एक और कमांड है जिसे आप उसी फाइल में लिखना चाहते हैं, तो आप केवल save टाइप कर सकते हैं, फिर "एरो" का अंतिम उपयोग वापस लाने के लिए अप एरो का उपयोग करें (ताकि -a विकल्प और फ़ाइल नाम पहले से मौजूद हो) और बस पंक्ति संख्या संपादित करें।

ध्यान दें कि आप कई लाइनों को बचाने के लिए और रेखाओं को भी दे सकते हैं:

save -a myfile.py 15 18 19-25

शेल में आप पहले IPython फाइल को एक रेगुलर पायथन फाइल (.py) में बदल सकते हैं और फिर क्लीन अप कर सकते हैं:

http://ipython.org/ipython-doc/3/notebook/nbconvert.html (स्क्रिप्ट प्रारूप देखें)

आप नोटबुक संपादक में फ़ाइल को पायथन फ़ाइल के रूप में भी डाउनलोड कर सकते हैं और इस चरण के बाद क्लीनअप कर सकते हैं।







copying