3.5. Comandos do Sistema
O kernel IPython estende a sintaxe da linguagem Python para possibilitar, entre outras coisas, o uso de comandos do Sistema Operacional (SO) de dentro do terminal IPython ou das células dos Jupyter Notebooks, no ambiente interativo Jupyter. Linhas de código começando pelo caractere !
são passadas diretamente para o SO. Além disso, é possível recuperar a saída produzida pelos comandos do SO através de linhas usando !!
(dupla exclamação) ou uma sintaxe do tipo var = !cmd
.
O comando !ls
, abaixo, faz com que o comando ls
do SO seja executado, retornando a listagem de arquivos e sub-diretórios do diretório corrente da aplicação de onde o comando foi executado.
In [1]: !ls
Docker LiClipse Modules QGIS-Data QGIS-Plugins
Também é possível passar opções para os comandos a serem executados. No caso do comando ls
, dos sistemas Unix, a opção -l
faz com que listagem seja mais detalhada:
In [2]: !ls -l
total 20
drwxrwxr-x 2 gribeiro gribeiro 4096 abr 12 17:31 Docker
drwxrwxr-x 3 gribeiro gribeiro 4096 abr 12 18:00 LiClipse
drwxrwxr-x 3 gribeiro gribeiro 4096 abr 12 18:32 Modules
drwxrwxr-x 2 gribeiro gribeiro 4096 abr 12 17:52 QGIS-Data
drwxrwxr-x 3 gribeiro gribeiro 4096 abr 12 17:57 QGIS-Plugins
É possível utilizar os resultados dos comandos de sistema, associando o resultado a uma variável:
In [3]: resultado = !ls
In [4]: for f in resultado:
...: print(f)
...:
Docker
LiClipse
Modules
QGIS-Data
QGIS-Plugins
Podemos também passar valores de variáveis em Python para os comandos mágicos. Para isso, basta prefixar o nome dos objetos Python com o caracter $
ou delimitá-los com {}
. Exemplo:
In [5]: diretorios = [ "/home", "/", "/usr" ]
In [6]: for d in diretorios:
...: print("---------")
...: !ls $d
...:
---------
gribeiro
---------
bin cdrom etc lib lib64 lost+found mnt proc run snap sys usr
boot dev home lib32 libx32 media opt root sbin srv tmp var
---------
bin games include lib lib32 lib64 libexec libx32 local sbin share src
ou, usando os nomes de objetos delimitados por {}
:
In [7]: for d in diretorios:
...: print("---------")
...: !ls {d}
...:
---------
gribeiro
---------
bin cdrom etc lib lib64 lost+found mnt proc run snap sys usr
boot dev home lib32 libx32 media opt root sbin srv tmp var
---------
bin games include lib lib32 lib64 libexec libx32 local sbin share src