Una aplicación Java-Maven que permite ejecutar scripts Python, con soporte completo para entornos virtuales, gestión de dependencias y una interfaz de línea de comandos intuitiva.
- Características
- Requisitos
- Instalación
- Uso Básico
- Ejemplos
- Gestión de Entornos Virtuales
- Opciones de Línea de Comandos
- Códigos de Salida
- Estructura del Proyecto
- Solución de Problemas
- ✅ Ejecución de scripts Python desde Java
- 🐍 Soporte para entornos virtuales (venv)
- 📦 Gestión automática de dependencias Python
- 🔧 Interfaz CLI intuitiva con ayuda integrada
- 🔄 Múltiples argumentos para scripts Python
- 📁 Validación automática de archivos y permisos
- ⚡ Configuración persistente de entornos
- Java 11 o superior
- Python 3 o superior
- Maven 3.6+ (solo para compilación)
# Verificar Java
java -version
# Verificar Python
python --version
# o
python3 --version
# Verificar Maven (para desarrollo)
mvn -version# Clonar el proyecto via HTTPS
git clone https://github.com/alexdevzz/java-python-executor.git
# o via SSH
git clone git@github.com:alexdevzz/java-python-executor.git
# Compilar con Maven
mvn clean package
# El JAR se creará en: target/java-python-executor.jarjava -jar java-python-executor.jar --helpjava -jar java-python-executor.jar [OPCIONES] script.py [ARGUMENTOS_PYTHON...]java -jar java-python-executor.jar mi_script.pyjava -jar java-python-executor.jar mi_script.py arg1 arg2 arg3java -jar java-python-executor.jar mi_script.py arg1 --venv /ruta/venv# Sin entorno virtual
java -jar java-python-executor.jar horoscope.py aries
# Con entorno virtual
java -jar java-python-executor.jar horoscope.py taurus --venv C:\venvs\horoscope_venv# Crear entorno con dependencias
java -jar java-python-executor.jar --create-env data-science --python 3 --install numpy pandas matplotlib
# Ejecutar análisis
java -jar java-python-executor.jar analizar_datos.py dataset.csv --venv venvs/data-science# Crear entorno para API
java -jar java-python-executor.jar --create-env fastapi-env \
--install fastapi uvicorn
# Ejecutar servidor
java -jar java-python-executor.jar api_server.py \
--venv venvs/fastapi-env --host 0.0.0.0 --port 8080java -jar java-python-executor.jar --list-envsSalida ejemplo:
📋 ENTORNOS VIRTUALES CONFIGURADOS
Nombre Ruta Estado
----------------------------------------------------------------------
data-science ./venvs/data-science ✅ VÁLIDO
web-dev ./venvs/web-dev ✅ VÁLIDO
ml-env ./venvs/ml-env ❌ NO VÁLIDO
# Versión básica
java -jar java-python-executor.jar --create-env mi-entorno
# Con versión específica de Python
java -jar java-python-executor.jar --create-env proyecto37 --python 3.7
# Con paquetes preinstalados
java -jar java-python-executor.jar --create-env data-tools --install numpy pandas scikit-learn jupyter
# Ruta personalizada
java -jar java-python-executor.jar --create-env custom-location --venv /opt/entornos/mi-proyectoLos entornos se validan automáticamente al:
- Listarlos (muestra estado ✅/❌)
- Ejecutar scripts (verifica Python ejecutable)
- Usar
--venv(comprueba estructura de venv)
| Opción | Forma larga | Descripción |
|---|---|---|
-h |
--help |
Muestra ayuda detallada |
-v RUTA |
--venv RUTA |
Usar entorno virtual en RUTA |
-l |
--list-envs |
Listar entornos virtuales configurados |
-c NOMBRE |
--create-env NOMBRE |
Crear nuevo entorno virtual |
| Opción | Descripción | Ejemplo |
|---|---|---|
--python VERSION |
Versión de Python | --python 3.9 |
--install PKG... |
Paquetes a instalar | --install numpy pandas |
Usa -- para separar argumentos de Java de los de Python:
java -jar app.jar script.py --venv myenv -- --verbose --output=resultado.json
# ↑ args Java ↑ ↑ args Python ↑La aplicación retorna códigos de salida estándar:
| Código | Significado |
|---|---|
0 |
✅ Éxito - Script ejecutado correctamente |
1 |
❌ Error - Error general de la aplicación |
# Ejecutar y capturar código de salida
java -jar java-python-executor.jar script.py
EXIT_CODE=$?
if [ $EXIT_CODE -eq 0 ]; then
echo "✅ Script ejecutado exitosamente"
elif [ $EXIT_CODE -eq 1 ]; then
echo "❌ Error en la aplicación"
else
echo "🐍 Error en script Python (código: $EXIT_CODE)"
fijava-python-executor/
├── src/main/java/com/alexdevzz/pythonrunner/
│ ├── cli/
│ │ └── CommandLineArgs.java # Parser de argumentos CLI
│ ├── core/
│ │ ├── PythonRunner.java # Ejecutor principal
│ │ ├── VirtualEnvManager.java # Gestionador de entornos virtuales
│ │ ├── PythonService.java # Servicio con lógica de negocio
│ │ └── ExecutionResult.java # Resultados de ejecución
│ └── Main.java # Punto de entrada
├── target/
│ └── java-python-executor.jar # JAR ejecutable
├── python-envs.properties # Configuración de entornos (auto)
├── venvs/ # Entornos virtuales (auto)
├── README.md # Documentación (este archivo)
└── pom.xml # Configuración Maven
python-envs.properties: Se crea al primer uso, almacena configuraciones de entornos virtuales creadosvenvs/: Directorio para entornos virtuales creados- Logs: La salida se muestra en consola, errores en stderr
# Verificar instalación
python --version
# Especificar Python 3 explícitamente
# Editar PythonRunner.java línea: command.add("python3");# Verificar estructura del venv
ls -la /ruta/venv/
# Debe contener: bin/python o Scripts/python.exe
# Crear nuevo entorno si está corrupto
java -jar app.jar --create-env nuevo-venv# Dar permisos de ejecución al script
chmod +x script.py
# Verificar permisos del directorio
ls -ld /ruta/script.py# Actualizar pip primero
java -jar app.jar --create-env test --install pip --upgrade
# Instalar paquetes por separado
java -jar app.jar --create-env test --install numpy
java -jar app.jar --create-env test --install pandas# Aumentar memoria Java
java -Xmx2g -jar java-python-executor.jar script.py# Ver información detallada
java -Ddebug=true -jar java-python-executor.jar script.py
# Log verbose
java -Dverbose=true -jar java-python-executor.jar script.py#!/usr/bin/env python3
import sys
print(f"¡Hola desde Python {sys.version}!")
print(f"Argumentos recibidos: {sys.argv[1:]}")
print("Script ejecutado exitosamente")
sys.exit(0)#!/usr/bin/env python3
import sys
import json
from datetime import datetime
def main():
if len(sys.argv) < 2:
print("Uso: python procesador_datos.py <archivo> [--json]")
sys.exit(1)
archivo = sys.argv[1]
formato_json = "--json" in sys.argv
resultado = {
"archivo": archivo,
"timestamp": str(datetime.now()),
"lineas_procesadas": 100,
"estado": "completado"
}
if formato_json:
print(json.dumps(resultado, indent=2))
else:
print(f"Procesado: {archivo}")
print(f"Líneas: {resultado['lineas_procesadas']}")
print(f"Hora: {resultado['timestamp']}")
sys.exit(0)
if __name__ == "__main__":
main()- Reportar issues: Describe el problema con detalles
- Sugerir features: Explica el caso de uso
- Pull requests: Sigue el estilo de código existente
- Documentación: Mejora este README si encuentras errores
Este proyecto está bajo la Licencia MIT. Ver archivo LICENSE para más detalles.
- Equipo Java por el ecosistema robusto
- Comunidad Python por los entornos virtuales
- Maven por la gestión de dependencias
- Contribuidores que mejoran la herramienta
¿Preguntas o problemas?
- Revisa la sección Solución de Problemas
- Ejecuta
java -jar java-python-executor.jar --help - Crea un issue en el repositorio
¡Feliz ejecución de scripts Python desde Java! 🚀🐍☕