sh

Очень простой и удобный пакет для запуска внешних программ из питона.

In [1]:
import sh

Вызовем команду ls. Это не значит, что в модуле sh есть 100500 функций, соответствующих всем командам; это было бы невозможно. Модуль sh производит тёмную магию, переопределяющую вызов sh.something в вызов внешней программы.

In [2]:
sh.ls()
Out[2]:
C1.pyx		 foo.c			     poster	    python8.ipynb
C2.pyx		 foo.o			     python.png     root.ipynb
C3.pyx		 foo.pxd		     python0.png    rpyc.html
Untitled.ipynb	 foo.pyx		     python1.html   rpyc.ipynb
Untitled1.ipynb  foo.so			     python1.ipynb  rpyc_old.ipynb
Untitled2.ipynb  google-python-exercises     python2.html   sh.ipynb
Untitled3.ipynb  ind.gle		     python2.ipynb  sympy.html
Zskim.root	 ind.png		     python3.html   sympy.ipynb
__pycache__	 iterators_generators.ipynb  python3.ipynb  tasks
cfib.c		 minuit.html		     python4.html   text.txt
cfib.h		 minuit.ipynb		     python4.ipynb  text2.txt
cfib.o		 mpmath.html		     python5.html   wrap.c
cfoo.c		 mpmath.ipynb		     python5.ipynb  wrap.o
cfoo.h		 newtext.txt		     python6.html   wrap.pyx
cfoo.o		 osc.ipynb		     python6.ipynb  wrap.so
d1		 p1			     python7.html
du		 pandas.html		     python7.ipynb
fac.py		 pandas.ipynb		     python8.html

Результат можно присвоить строковой переменной.

In [3]:
s=sh.ls()
s.split()
Out[3]:
['C1.pyx',
 'foo.c',
 'poster',
 'python8.ipynb',
 'C2.pyx',
 'foo.o',
 'python.png',
 'root.ipynb',
 'C3.pyx',
 'foo.pxd',
 'python0.png',
 'rpyc.html',
 'Untitled.ipynb',
 'foo.pyx',
 'python1.html',
 'rpyc.ipynb',
 'Untitled1.ipynb',
 'foo.so',
 'python1.ipynb',
 'rpyc_old.ipynb',
 'Untitled2.ipynb',
 'google-python-exercises',
 'python2.html',
 'sh.ipynb',
 'Untitled3.ipynb',
 'ind.gle',
 'python2.ipynb',
 'sympy.html',
 'Zskim.root',
 'ind.png',
 'python3.html',
 'sympy.ipynb',
 '__pycache__',
 'iterators_generators.ipynb',
 'python3.ipynb',
 'tasks',
 'cfib.c',
 'minuit.html',
 'python4.html',
 'text.txt',
 'cfib.h',
 'minuit.ipynb',
 'python4.ipynb',
 'text2.txt',
 'cfib.o',
 'mpmath.html',
 'python5.html',
 'wrap.c',
 'cfoo.c',
 'mpmath.ipynb',
 'python5.ipynb',
 'wrap.o',
 'cfoo.h',
 'newtext.txt',
 'python6.html',
 'wrap.pyx',
 'cfoo.o',
 'osc.ipynb',
 'python6.ipynb',
 'wrap.so',
 'd1',
 'p1',
 'python7.html',
 'du',
 'pandas.html',
 'python7.ipynb',
 'fac.py',
 'pandas.ipynb',
 'python8.html']

Командам можно передавать параметры.

In [4]:
sh.ls('d1')
Out[4]:
__pycache__  d2  m1.py

Допустим, мы хотим вызывать команду ls много раз. sh также производит тёмную магию, переопределяющую from sh import something, так что после этого импорта ls становится полноправной питонской функцией (вызывающей внешнюю программу).

In [5]:
from sh import ls
In [6]:
s=ls('d1')
s.split()
Out[6]:
['__pycache__', 'd2', 'm1.py']
In [7]:
ls('-l','d1')
Out[7]:
итого 12
drwxr-xr-x 2 grozin grozin 4096 ноя  4  2015 __pycache__
drwxr-xr-x 3 grozin grozin 4096 ноя  4  2015 d2
-rw-r--r-- 1 grozin grozin   23 ноя  4  2015 m1.py

Разумеется, таким же образом Вы можете вызвать Вашу программу (написанную на любом языке).