https://manuais.iessanclemente.net/index.php?title=Python_-_Administraci%C3%B3n_de_sistemas&feed=atom&action=historyPython - Administración de sistemas - Historial de revisiones2024-03-28T22:41:20ZHistorial de revisiones de esta página en el wikiMediaWiki 1.36.2https://manuais.iessanclemente.net/index.php?title=Python_-_Administraci%C3%B3n_de_sistemas&diff=69346&oldid=prevVieites en 17:10 2 feb 20212021-02-02T17:10:16Z<p></p>
<p><b>Página nueva</b></p><div>== Ejecución de scripts por SSH ==<br />
Veamos un ejemplo:<br />
* [https://docs.python.org/es/3.8/library/sys.html?highlight=sys#module-sys Ayuda módulo sys]<br />
* [https://docs.python.org/es/3.8/library/os.html?highlight=#module-os Ayuda módulo os]<br />
<br />
<source lang="python"><br />
#!/usr/bin/python<br />
# -*- coding: utf-8 -*-<br />
<br />
import subprocess<br />
import sys<br />
<br />
HOST="usuario@192.168.1.136"<br />
<br />
COMMAND="uname -a"<br />
<br />
ssh = subprocess.Popen(["ssh", "%s" % HOST, COMMAND],<br />
shell=False,<br />
stdout=subprocess.PIPE,<br />
stderr=subprocess.PIPE)<br />
result = ssh.stdout.readlines()<br />
if result == []:<br />
error = ssh.stderr.readlines()<br />
print >>sys.stderr, "ERROR: %s" % error<br />
else:<br />
print result<br />
</source><br />
<br />
== Módulo os ==<br />
: [https://docs.python.org/2/library/os.html Página oficial del módulo os].<br />
: El módulo os nos permite acceder a funcionalidades dependientes del Sistema Operativo. Sobre todo, aquellas que nos refieren información sobre el entorno del mismo y nos permiten manipular la estructura de directorios (para leer y escribir archivos. <br />
: Veamos un ejemplo:<br />
<source lang="python"><br />
<br />
#!/usr/bin/python3<br />
<br />
import os<br />
<br />
# Descubrir nuestro directorio de trabajo actual<br />
dirActual = os.getcwd()<br />
print("Directorio trabajo actual: {}".format(dirActual))<br />
<br />
# Cambiar de directorio<br />
os.chdir('/tmp')<br />
dirActual = os.getcwd()<br />
print("\nAhora estamos en el directorio: {}".format(dirActual))<br />
<br />
# Crear un directorio si este no existe<br />
##Pedimos el path del directorio a crear:<br />
carpeta = str(input("\nIntroduce directorio a crear (ruta completa): "))<br />
##Primero comprobamos si esta ya existe<br />
if os.path.exists(carpeta): # Si queremos ver si existe y es un directorio: os.path.isdir(carpeta)<br />
print("La carpeta {} ya existe".format(carpeta))<br />
exit(1)<br />
else:<br />
os.system("mkdir {}".format(carpeta))<br />
print("Creamos la carpeta {}".format(carpeta))<br />
# Para ver un listado del directorio donde se creó ahora mismo esa carpeta<br />
cpath = carpeta.split("/")[0:-1] #Seleccionamos todas menos la creada<br />
dir_madre = os.sep.join(cpath) #Que, en el caso de linux es "/".join(cpath)<br />
print("Directorio madre : {}".format(dir_madre))<br />
listado = os.listdir(dir_madre)<br />
print("listado de los elementos de {}:".format(dir_madre))<br />
for elemento in listado:<br />
print(" - {}".format(str(elemento)))<br />
<br />
exit(0)<br />
<br />
</source><br />
<br />
Este módulo consigue que los scripts sean portables entre unos sistemas operativos y otros.<br />
Veamos un ejemplo:<br />
<source lang="python"><br />
$ python3<br />
>>> import sys, os<br />
>>> sys.platform<br />
'linux'<br />
>>> print(os.sep)<br />
/<br />
>>> mypath = os.sep.join ('primero', 'segundo', 'tercero')<br />
>>> print(mypath)<br />
primero/segundo/tercero<br />
<br />
# En un sistema Windows el separador sería "\" y ya lo hace el script automáticamente<br />
</source><br />
<br />
: - [http://www.tutorialspoint.com/python/os_file_methods.htm Tabla con los métodos del módulo os].<br />
: - [http://librosweb.es/libro/python/capitulo_10/modulos_de_sistema.html Ayuda interesante en Librosweb].<br />
<br />
== Módulo shutil ==<br />
: [https://docs.python.org/2/library/shutil.html Página oficial módlo shutil]<br />
:<br />
<br />
== Módulo subprocess ==<br />
: [https://docs.python.org/2/library/subprocess.html Página oficial del módulo subprocess]<br />
: Ejecutar comandos con el método '''call''':<br />
<source lang="python"><br />
import subprocess<br />
<br />
#Primer modo<br />
directorio = ['mkdir', '/home/jefe/cosa1']<br />
subprocess.call(directorio)<br />
<br />
#Segundo modo<br />
directorio = 'mkdir /home/jefe/cosa2'<br />
subprocess.call(directorio, shell=True)<br />
</source><br />
<br />
* Es mucho más cómoda la segunda opción (''shell=True''), pero más peligrosa pues los comandos se ejecutan directamente en la shell y el programa se puede hacer vulnerable a ataques de "inyección de shell":<br />
<source lang="python"><br />
>>> path = input('Inserta la ruta del directorio: ')<br />
Inserta la ruta del directorio: ATENCIÓN; rm * -rf<br />
>>> subprocess.call('ls ' + path, shell=True) # ¡No ejecutar!<br />
</source><br />
<br />
: Capturar la salida con '''popen''':<br />
<source lang="python"><br />
#!/usr/bin/python3<br />
# -*- coding: utf-8 -*-<br />
<br />
from subprocess import PIPE, Popen<br />
<br />
comando = 'ls -lha /home/jefe/scripts'<br />
proceso = Popen(comando, shell=True, stdout=PIPE, stderr=PIPE)<br />
error_encontrado = proceso.stderr.read()<br />
listado = proceso.stdout.read().decode("utf-8")<br />
proceso.stdout.close()<br />
<br />
if not error_encontrado:<br />
print(listado)<br />
else:<br />
print("Se produjo el siguiente error:\n {}".format(error_encontrado))<br />
</source><br />
<br />
== Módulo shutil ==<br />
: [https://docs.python.org/es/3.8/library/shutil.html Página oficial módulo shutil]<br />
:<br />
<br />
== Módulo platform ==<br />
El módulo [https://docs.python.org/2/library/platform.html platform] nos da información sobre el sistema en el que estamos trabajando.<br />
Lo mejor para descubrir su potencial es ver un ejemplo:<br />
<source lang="python"><br />
cat prueba.py <br />
#!/usr/bin/python<br />
# -*- coding: utf-8 -*-<br />
<br />
import platform<br />
<br />
profile = [<br />
platform.architecture(),<br />
platform.dist(),<br />
platform.libc_ver(),<br />
platform.machine(),<br />
platform.node(),<br />
platform.platform(),<br />
platform.processor(),<br />
platform.python_build(),<br />
platform.python_compiler(),<br />
platform.python_version(),<br />
platform.system(),<br />
platform.uname(),<br />
platform.version(),<br />
]<br />
<br />
for info in profile:<br />
print info<br />
</source><br />
Siendo la salida:<br />
<source lang="bash"><br />
('64bit', 'ELF')<br />
('debian', '8.2', '')<br />
('glibc', '2.4')<br />
x86_64<br />
debian<br />
Linux-3.16.0-4-amd64-x86_64-with-debian-8.2<br />
<br />
('default', 'Mar 1 2015 12:57:24')<br />
GCC 4.9.2<br />
2.7.9<br />
Linux<br />
('Linux', 'debian', '3.16.0-4-amd64', '#1 SMP Debian 3.16.7-ckt11-1+deb8u3 (2015-08-04)', 'x86_64', '')<br />
#1 SMP Debian 3.16.7-ckt11-1+deb8u3 (2015-08-04)<br />
</source><br />
<br />
<br />
--[[Python3|Volver]]</div>Vieites