Chápu, zní to jako prasárna. Pythoní interpret jako shell. Ale funguje to. A dokonce líp, než kterýkoliv jiný shell, jaký jsem kdy měl (dobře no, zkusil jsem jen Bash a ZSH a díky me přirozené lamosti jsem do nich nikdy nepronikl).
Příkazem ipython -p sh
se nám spustí interpreter v shellovém režimu. Ten se oproti klasickému liší v několika drobnostech:
Prompt je možno změnit k obrazu svému spolu s dalším nastavením v ~/.ipython/ipy_user_cfg.py nebo ~/.ipython/ipythonrc-sh
Dostali sme tak kombinaci systémového shellu a Pythoního interpretu. Fungují jak systémové příkazy, tak příkazy jazyka python. Celé je to spolu svázané :)
Chceme-li zavolat systémový příkaz, který nemá vytvořený alias v interpretu, vložíme před něj vykřičník. Ten způsobí, že interpret spustí příkaz (v externím shellu, chápu-li dobře dokumentaci) a výstup zobrazí (nebo uloží do proměnné). Z tohoto důvodu příkaz cd volaný tímto způsobem nebude fungovat, protože !cd změní pracovní adresář v shellu, který ihned po vykonání příkazu zanikne.
Většina příkazů má svůj vytvořeý svůj alias, který zjistíme pomocí cmd?
Při ukládání výstupu příkazu do proměnné musíme psát vykřičník, aby Python věděl, že nepracuje s proměnnou.
Výstup příkazu jde uložit do proměnné, přičemž vznikne seznam řetězců (jeden řádek výstupu = jedna položka seznamu). Tento seznám má definován několik vlastních metod a navíc dědí všechny metody Pythoního Listu.
[~]|1> lines = !ls -l [~]|2> lines SList (.p, .n, .l, .s, .grep(), .fields() available). Value: 0: celkem 8388 1: drwxr-xr-x 3 elvard elvard 72 3. srp 09.35 Angsoc 2: drwxr-xr-x 2 elvard elvard 176 22. srp 10.57 Blender 3: drwxr-xr-x 2 elvard elvard 288 12. zář 18.45 CodeGolf 4: -rw-r--r-- 1 elvard elvard 4720861 18. srp 19.56 hacking-vim.pdf 5: drwxr-xr-x 3 elvard elvard 296 14. zář 04.27 Perl 6: drwxr-xr-x 2 elvard elvard 112 22. srp 11.51 Povray 7: drwxr-xr-x 5 elvard elvard 144 14. zář 21.35 Python 8: drwxr-xr-x 3 elvard elvard 136 7. srp 20.40 TeX 9: -rw-r--r-- 1 elvard elvard 3850701 18. srp 19.55 vimbook.pdf
Interpret nám vždy připomene, že objekt SList má metody .p, .n, .l, .s, .grep(), .fields()
lines je alias pro lines.l což vypíše obsah proměnné jako seznam
.s, resp. .n, Vypíše všechny položky oddělené mezerou, resp. novým řádkem
.grep (regexp, prune=False, field=None) – Zobrazí se jen řádky, které odpovídají regexpu (Při prune=True se zobrazí ty, co neodpovídají). Pokud uvedeme field, tak se porovnává jen určitý sloupec (sloupce jsou odděleny mezerou).
.fields (*fields) – Zobrazí jen určité sloupce. Funguje záporné číslování pro označení sloupce „odzadu“. Sloupce jsou spojeny mezerou. Př.: lines.fields(1, 0)
– Vypíše druhý a první sloupec
Tento příkaz má navíc několik vlastností:
cd – : Poslední navštívený adresář
cd -<n>: N-tý navštívený adresář v historii (od konce)
cd -b : Adresář definovaný pomocí příkazu %bookmark
A zrovna ty bookmarky mi lichotí :)
Je zatím to poslední, co stojí za zmínku. Je to jakási kombinace findu a sedu.
Kromě zástupných znaků * a ? se pro vyhledání používá několik modifikátorů:
rec: – vyhledává rekurzivně v daném adresáři
! – z vyhledávání jsou vyloučeny položky odpovídající vzoru
dir: – hledná jen adresáře
Několik příkladů:
files = %mglob !.svn rec:. # vše krom souborů subversion
files = %mglob rec:*.py # jen Pythoní soubory
Získáme tak seznam řetězců, se kterým můžeme dělat psí kusy.
Zkoušel jsem roury, vše vypadá, že funguje. Pokud teda jsou roury vlastností shellu a ne něčeho jiného… A jelikož už mi dochází informace a projevuje se opět ma přirozená lamovost, tak to utnu.
And now something completely different
…
Přečteno 10 007×
Přečteno 8 664×
Přečteno 8 000×
Přečteno 6 559×
Přečteno 6 104×