Bash Scripting y Python
Redirecting streams
Para redirigir flujos de entrada y salida en Python, puedes usar los módulos sys y io. A continuación se muestra cómo redirigir la salida estándar a un archivo.
import sys
# Redirigir la salida estándar a un archivo
sys.stdout = open('output.txt', 'w')
print("Este texto se escribe en el archivo 'output.txt'.")
# Restaurar la salida estándar
sys.stdout = sys.__stdout__
Pipes and pipelines
Para implementar tuberías y pipelines en Python, puedes usar el módulo subprocess para ejecutar comandos y conectar sus entradas y salidas.
import subprocess # Crear un pipeline que pasa la salida de 'echo' a 'grep' p1 = subprocess.Popen(['echo', 'Hello World'], stdout=subprocess.PIPE) p2 = subprocess.Popen(['grep', 'World'], stdin=p1.stdout, stdout=subprocess.PIPE) p1.stdout.close() # Permitir que p1 termine output = p2.communicate()[0] print(output.decode())
Signaling processes
Para enviar señales a procesos en Python, puedes usar el módulo os para enviar señales a procesos específicos.
import os
import signal
import time
# Proceso hijo que espera señales
pid = os.fork()
if pid == 0:
while True:
print("Esperando señales...")
time.sleep(1)
else:
# Esperar un momento y luego enviar una señal SIGTERM
time.sleep(5)
os.kill(pid, signal.SIGTERM)
print(f"Señal SIGTERM enviada al proceso {pid}")
Creating bash scripts
En Python, puedes generar y ejecutar scripts de bash utilizando el módulo subprocess.
import subprocess
# Crear un archivo de script bash
script_content = """#!/bin/bash
echo "Este es un script Bash ejecutado desde Python"
"""
with open('script.sh', 'w') as file:
file.write(script_content)
# Hacer el script ejecutable
subprocess.run(['chmod', '+x', 'script.sh'])
# Ejecutar el script
subprocess.run(['./script.sh'])
Using variables and globs
Para usar variables y globs en Python, puedes utilizar el módulo glob para la expansión de patrones en nombres de archivo.
import glob
# Usar globs para encontrar archivos .txt en el directorio actual
files = glob.glob('*.txt')
print("Archivos .txt en el directorio actual:")
for file in files:
print(file)
Conditional execution in bash
Para la ejecución condicional de comandos en bash, puedes usar operadores lógicos como && y ||. Aquí un ejemplo en Python para crear un script bash con condicionales.
import subprocess
# Crear un script bash con ejecución condicional
script_content = """#!/bin/bash
if [ -f "file.txt" ]; then
echo "file.txt existe"
else
echo "file.txt no existe"
fi
"""
with open('conditional_script.sh', 'w') as file:
file.write(script_content)
# Hacer el script ejecutable
subprocess.run(['chmod', '+x', 'conditional_script.sh'])
# Ejecutar el script
subprocess.run(['./conditional_script.sh'])
While loops in bash scripts
En bash, los bucles while se usan para ejecutar un bloque de código mientras se cumpla una condición. A continuación se muestra cómo crear un script bash con un bucle while desde Python.
import subprocess
# Crear un script bash con un bucle while
script_content = """#!/bin/bash
counter=0
while [ $counter -lt 5 ]; do
echo "Contador: $counter"
counter=$((counter + 1))
sleep 1
done
"""
with open('while_loop_script.sh', 'w') as file:
file.write(script_content)
# Hacer el script ejecutable
subprocess.run(['chmod', '+x', 'while_loop_script.sh'])
# Ejecutar el script
subprocess.run(['./while_loop_script.sh'])
For loops in bash scripts
Los bucles for en bash se utilizan para iterar sobre una lista de elementos. El siguiente código muestra cómo crear un script bash con un bucle for desde Python.
import subprocess
# Crear un script bash con un bucle for
script_content = """#!/bin/bash
for i in {1..5}; do
echo "Número: $i"
done
"""
with open('for_loop_script.sh', 'w') as file:
file.write(script_content)
# Hacer el script ejecutable
subprocess.run(['chmod', '+x', 'for_loop_script.sh'])
# Ejecutar el script
subprocess.run(['./for_loop_script.sh'])
Advanced command interaction
Para la interacción avanzada con comandos, puedes combinar subprocess con técnicas de procesamiento de entrada y salida. A continuación se muestra un ejemplo de interacción avanzada con comandos en Python.
import subprocess
# Ejecutar un comando y capturar su salida
process = subprocess.Popen(['grep', 'pattern'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, text=True)
output, _ = process.communicate(input='line with pattern\nline without pattern')
print("Salida del comando grep:")
print(output)
Choosing between bash and python
Elegir entre Bash y Python depende del contexto. Bash es útil para scripts de shell y tareas de administración del sistema, mientras que Python ofrece más flexibilidad y potencia para aplicaciones complejas.
# Ejemplo en Bash
# !/bin/bash
echo "Hello from Bash"
# Ejemplo en Python
# print("Hello from Python")
# Ambas opciones tienen sus casos de uso específicos.