<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
	<id>https://manuais.iessanclemente.net/index.php?action=history&amp;feed=atom&amp;title=Python_-_Administraci%C3%B3n_de_sistemas</id>
	<title>Python - Administración de sistemas - Historial de revisiones</title>
	<link rel="self" type="application/atom+xml" href="https://manuais.iessanclemente.net/index.php?action=history&amp;feed=atom&amp;title=Python_-_Administraci%C3%B3n_de_sistemas"/>
	<link rel="alternate" type="text/html" href="https://manuais.iessanclemente.net/index.php?title=Python_-_Administraci%C3%B3n_de_sistemas&amp;action=history"/>
	<updated>2026-10-23T23:00:08Z</updated>
	<subtitle>Historial de revisiones de esta página en la wiki</subtitle>
	<generator>MediaWiki 1.46.2</generator>
	<entry>
		<id>https://manuais.iessanclemente.net/index.php?title=Python_-_Administraci%C3%B3n_de_sistemas&amp;diff=69346&amp;oldid=prev</id>
		<title>Vieites en 17:10 2 feb 2021</title>
		<link rel="alternate" type="text/html" href="https://manuais.iessanclemente.net/index.php?title=Python_-_Administraci%C3%B3n_de_sistemas&amp;diff=69346&amp;oldid=prev"/>
		<updated>2021-02-02T17:10:16Z</updated>

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