Saltar al contenido

Cómo usar sh en Python

¿Qué es sh?

sh es un contenedor de subprocesos único que asigna los programas de su sistema a Python
funciona dinámicamente. sh te ayuda a escribir scripts de shell en Python al darte
las buenas características de Bash (llamada de comando fácil, canalización fácil) con toda la potencia
y flexibilidad de Python. [source]

Comenzando con sh

sh es una interfaz de subproceso completa para Python que le permite llamar a cualquier
programa como si fuera una función. sh te permite llamar a casi cualquier cosa que quieras
podría ejecutarse desde un shell de inicio de sesión mucho más ordenadamente que con subproceso.
y lo que es más importante, le permite capturar y analizar la salida con mucha más facilidad.

Instalación

los instalación de pescado se hace a través del comando pip

pip install sh

Uso

La forma más sencilla de empezar a trabajar es importar sh directamente o importar su
programa de sh. Cada comando que desea ejecutar se importa como cualquier otro módulo.

Ese comando se puede usar como una declaración de Python.

Los argumentos se pasan de la forma habitual, y la salida se puede capturar y trabajar con
como la moda.

# get interface information
import sh
print sh.ifconfig("eth0")

from sh import ifconfig
print ifconfig("eth0")

# print the contents of this directory
print ls("-l")

# substitute the dash for an underscore for commands that have dashes in their names
sh.google_chrome("http://google.com”)

Ejecutando comandos con sh

Los comandos se llaman como funciones.

“Tenga en cuenta que estas no son funciones de Python, sino que ejecutan comandos binarios
en su sistema dinámicamente resolviendo su PATH, al igual que lo hace Bash. En esto
De esta manera, todos los programas de su sistema están fácilmente disponibles en Python “.

Muchos programas tienen sus propios subconjuntos de comandos, como git (branch, checkout).

sh maneja los subcomandos a través del acceso a atributos.

from sh import git

# resolves to "git branch -v"
print(git.branch("-v"))

print(git("branch", "-v")) # the same command

Argumentos de palabras clave

Los argumentos de palabras clave también funcionan como era de esperar: se reemplazan con el
Opción de línea de comandos de formato largo y breve. [source]

# Resolves to "curl http://duckduckgo.com/ -o page.html --silent"
sh.curl("https://duckduckgo.com/", o="page.html", silent=True)

# If you prefer not to use keyword arguments, this does the same thing
sh.curl("https://duckduckgo.com/", "-o", "page.html", "--silent")

# Resolves to "adduser amoffat --system --shell=/bin/bash --no-create-home"
sh.adduser("amoffat", system=True, shell="/bin/bash", no_create_home=True)

# or
sh.adduser("amoffat", "--system", "--shell", "/bin/bash", "--no-create-home”)

Encontrar comandos

“Which” busca la ruta completa de un programa o devuelve None si no existe.

Este comando es uno de los pocos comandos implementados como una función de Python, y
por lo tanto, no se basa en el programa “cuál” realmente existente.

print sh.which("python")     # "/usr/bin/python"
print sh.which("ls")         # "/bin/ls"

if not sh.which("supervisorctl"): sh.apt_get("install", "supervisor", “-y”)

Hay muchas más funciones que puedes usar con sh, y puedes encontrarlas todas.
en el documentación oficial.

Horneando

sh es capaz de “hornear” argumentos en comandos.

Entrenamiento de Python recomendado

Para el entrenamiento de Python, nuestra principal recomendación es DataCamp.

# The idea here is that now every call to ls will have the “-la” arguments already specified.
from sh import ls

ls = ls.bake("-la")
print(ls) # "/usr/bin/ls -la"

# resolves to "ls -la /"
print(ls(“/“))
Comando ssh horneado

Llamar a “hornear” en un comando crea un objeto invocable que pasa automáticamente
a lo largo de todos los argumentos pasados ​​a “hornear”.

# Without baking, calling uptime on a server would be a lot to type out:
serverX = ssh("myserver.com", "-p 1393", "whoami")

# To bake the common parameters into the ssh command
myserver = sh.ssh.bake("myserver.com", p=1393)

print(myserver) # "/usr/bin/ssh myserver.com -p 1393”

Ahora que el “myserver” invocable representa un comando ssh horneado, puede llamar
cualquier cosa en el servidor fácilmente:

# resolves to "/usr/bin/ssh myserver.com -p 1393 tail /var/log/dumb_daemon.log -n 100"
print(myserver.tail("/var/log/dumb_daemon.log", n=100))

# check the uptime
print myserver.uptime()
 15:09:03 up 61 days, 22:56,  0 users,  load average: 0.12, 0.13, 0.05

Para obtener funciones más avanzadas, consulte la documentación oficial.

Fuentes

https://github.com/amoffat/sh
https://github.com/Byzantium/Byzantium

Entrenamiento de Python recomendado

Para el entrenamiento de Python, nuestra principal recomendación es DataCamp.