Często używam interpretera Pythona do pracy z bazami danych, plikami itp. - w zasadzie dużo ręcznego formatowania częściowo ustrukturyzowanych danych. Nie zapisuję i nie czyszczę użytecznych fragmentów tak często, jak bym chciał. Czy istnieje sposób na zapisanie moich danych wejściowych w powłoce (połączenia db, przypisania zmiennych, trochę pętli i logiki) - trochę historii sesji interaktywnej? Jeśli użyję czegoś takiego script
, dostanę zbyt duży hałas. Naprawdę nie muszę trawić wszystkich obiektów - chociaż jeśli istnieje rozwiązanie, które to robi, byłoby OK. Idealnie byłoby po prostu mieć skrypt, który działał jako ten, który stworzyłem interaktywnie, i mogłem po prostu usunąć niepotrzebne bity. Czy istnieje pakiet, który to robi, lub podejście DIY?
AKTUALIZACJA : Jestem naprawdę zaskoczony jakością i przydatnością tych pakietów. Dla osób z podobnym swędzeniem:
- IPython - powinienem był używać tego od wieków, coś, co miałem na myśli
- reinteract - bardzo imponujące, chcę dowiedzieć się więcej o wizualizacji i wygląda na to, że będzie tam świecić. Coś w rodzaju aplikacji komputerowej gtk / gnome, która renderuje wykresy w tekście. Wyobraź sobie hybrydową powłokę + kalkulator graficzny + mini zaćmienie. Dystrybucja źródła tutaj: http://www.reinteract.org/trac/wiki/GettingIt . Dobrze zbudowany na Ubuntu, integruje się również z instalatorami GNOME, Windows i Mac.
- bpython - bardzo fajne, wiele fajnych funkcji, autouzupełnianie (!), przewijanie do tyłu, jedno naciśnięcie klawisza zapisu do pliku, wcięcie, dobra robota. Dystrybucja źródła w Pythonie, wyciągnęła kilka zależności z sourceforge.
Jestem nawrócony, to naprawdę zaspokaja potrzebę między tłumaczem a redaktorem.
źródło
In[48]
.). Więcsave filename 1-48
zapisałbym całą sesję.%load my_useful_session
http://www.andrewhjon.es/save-interactive-python-session-history
źródło
Jest na to sposób . Zapisz plik w
~/.pystartup
...a następnie ustaw zmienną środowiskową
PYTHONSTARTUP
w swojej powłoce (np. in~/.bashrc
):Możesz także dodać to, aby uzyskać autouzupełnianie za darmo:
Pamiętaj, że będzie to działać tylko w systemach * nix. Ponieważ readline jest dostępny tylko na platformie Unix.
źródło
readline.parse_and_bind('tab: complete')
działa, jeśli używasz MacPorts Python.Jeśli używasz IPython , możesz zapisać do pliku wszystkie poprzednie polecenia, używając funkcji magicznej % history z parametrem -f , pe:
źródło
save
magii. To było bardzo pomocne%history -g -f full_history.py
do pobierania historii ze wszystkich sesji, nie tylko bieżącej. Zobacz także: dokumentacja dla% history .Po zainstalowaniu Ipython i otwarciu sesji Ipython przez uruchomienie polecenia:
z poziomu wiersza poleceń wystarczy uruchomić następującą komendę Ipython „magia”, aby automatycznie zarejestrować całą sesję Ipython:
Spowoduje to utworzenie unikatowego pliku .py i zapisanie sesji do późniejszego wykorzystania jako interaktywnej sesji Ipython lub do użycia w wybranym przez Ciebie skrypcie.
źródło
Ponadto reinteract daje interfejs podobny do notebooka do sesji Pythona.
źródło
reinteract
jest teraz zastępowany przez notebook IPython i QtConsole.Oprócz IPython, podobne narzędzie bpython ma funkcję „zapisz kod, który wprowadziłeś do pliku”
źródło
Musiałem walczyć o znalezienie odpowiedzi, byłem bardzo nowy w środowisku iPython.
To zadziała
Jeśli twoja sesja iPython wygląda tak
Chcesz zapisać linie od 1 do 135, a następnie w tej samej sesji ipython użyj tego polecenia
Spowoduje to zapisanie wszystkich instrukcji Pythona w pliku test.py w bieżącym katalogu (gdzie zainicjowałeś ipython).
źródło
Istnieje% magii historii do drukowania i zapisywania historii danych wejściowych (i opcjonalnie danych wyjściowych).
Aby zapisać bieżącą sesję w pliku o nazwie
my_history.py
:Historia IPython przechowuje zarówno wprowadzone przez ciebie polecenia, jak i uzyskane przez nie wyniki. Możesz łatwo przejść do poprzednich poleceń za pomocą klawiszy strzałek w górę i w dół lub uzyskać dostęp do swojej historii w bardziej wyrafinowany sposób.
Możesz użyć funkcji magicznej% history do zbadania przeszłych danych wejściowych i wyjściowych. Historia danych wejściowych z poprzednich sesji jest zapisywana w bazie danych, a IPython można skonfigurować do zapisywania historii danych wyjściowych.
Kilka innych magicznych funkcji może korzystać z historii wprowadzania, w tym% edit,% rerun,% recall,% macro,% save i% pastebin. Możesz użyć standardowego formatu w odniesieniu do wierszy:
Spowoduje to zabranie linii 3 i linii 18 do 20 z bieżącej sesji oraz linii 1-5 z poprzedniej sesji.
Zobacz historię%? dla Docstring i innych przykładów.
Pamiętaj również o zbadaniu możliwości % store magii w zakresie lekkiego przechowywania zmiennych w IPython.
Aby automatycznie zapisać przechowywane zmienne podczas uruchamiania, określ
c.StoreMagic.autorestore = True
w ipython_config.py.źródło
c.HistoryManager.db_log_output
w pliku konfiguracyjnym.Wystarczy włożyć do miski kolejną sugestię: Spyder
Ma dziennik historii i eksploratora zmiennych . Jeśli pracowałeś z MatLab, zobaczysz podobieństwa.
źródło
Jeśli chodzi o Linuksa, można użyć
script
polecenia, aby nagrać całą sesję. Jest to częśćutil-linux
pakietu, więc powinno być w większości systemów Linux. Możesz utworzyć alias lub funkcję, która zadzwoniscript -c python
i zostanie zapisana wtypescript
pliku. Na przykład, oto przedruk jednego takiego pliku.Mała wada polega na tym, że
script
rejestruje wszystko, nawet linie, za każdym razem, gdy trafiasz do backspace, itp. Możesz więc użyćcol
do wyczyszczenia danych wyjściowych (zobacz ten post na temat wymiany stosów w systemach Unix i Linux ).źródło
%history
Komenda jest niesamowite, ale niestety to nie pozwoli Ci zaoszczędzić rzeczy, które były% pasta „d do Sesh. Aby to zrobić, myślę, że musisz to zrobić%logstart
na początku (chociaż nie potwierdziłem, że to działa).Lubię to
%history -o -n -p -f filename.txt
co zapisze dane wyjściowe, numery wierszy i „>>>” przed każdym wejściem (opcje o, n i p). Zobacz dokumentację dotyczącą% historii tutaj .
źródło
istnieje inna opcja --- pyslice. w „wxpython 2.8 docs demos and tools” dostępny jest program open source o nazwie „pyslices”.
możesz używać go jak edytora, a także obsługiwać jak konsolę - wykonywanie każdej linii jak interaktywny interpreter z natychmiastowym echem.
oczywiście wszystkie bloki kodów i wyniki każdego bloku zostaną automatycznie zapisane w pliku txt.
wyniki są rejestrowane tuż za odpowiednim blokiem kodu. bardzo wygodne.
źródło
Jeśli używasz bpython , cała historia poleceń jest domyślnie zapisywana w
~/.pythonhist
.Aby zapisać polecenia do późniejszego ponownego użycia, możesz skopiować je do pliku skryptu python:
Następnie edytuj ten plik, aby go wyczyścić i umieść go pod ścieżką Pythona (pakiety witryn globalnego lub wirtualnego środowiska, bieżący katalog, wspominając w * .pth lub w inny sposób).
Aby dołączyć polecenia do powłoki, po prostu zaimportuj je z zapisanego pliku:
źródło
Niektóre komentarze pytały, jak zapisać wszystkie wejścia IPython jednocześnie. Dla% save magic w IPython, możesz zapisać wszystkie polecenia programowo, jak pokazano poniżej, aby uniknąć komunikatu zachęty, a także uniknąć podania liczb wejściowych. currentLine = len (In) -1% save -f my_session 1- $ currentLine
-f
Opcja służy do wymuszania wymiany plików ilen(IN)-1
pokazuje prąd wejściowy szybki w ipython, co pozwala zapisać całą sesję programowo.źródło
Dla tych
spacemacs
, którzy używają , iipython
to jest wpython-layer
komplecie, zapisywanie magii tworzy wiele niechcianych danych wyjściowych, ze względu na stałe polecenie automatycznego uzupełniania działające w tle, takie jak:Aby tego uniknąć, po prostu zapisz bufor ipython, tak jak zwykle zapisujesz inne:
spc f s
źródło
Chciałbym zasugerować inny sposób na utrzymanie sesji Pythona przez Tmux na Linuksie. uruchamiasz tmux, dołączasz siebie do sesji, którą otworzyłeś (jeśli nie jest dołączony po otwarciu bezpośrednio). uruchom python i rób co na nim robisz. następnie odłącz się od sesji. odłączenie od sesji tmux nie zamyka sesji. sesja pozostaje otwarta.
zalety tej metody: możesz dołączyć do tej sesji z dowolnego innego urządzenia (na wypadek, gdybyś mógł ssh swojego komputera)
Wady tej metody: ta metoda nie rezygnuje z zasobów używanych przez otwartą sesję Pythona, dopóki faktycznie nie istnieje interpreter Pythona.
źródło
Aby zapisać dane wejściowe i wyjściowe na XUbuntu :
Terminal
górny pasek menu i poszukajsave contents
w menu rozwijanymUważam, że zapisuje to dane wejściowe i wyjściowe, sięgając wstecz, kiedy otworzyłem terminal. Nie jest to specyficzne dla ipython i działałoby z sesjami ssh lub innymi zadaniami uruchamianymi z okna terminala.
źródło