2011-12-12 17 views
6

actualmente necesito instalar algún paquete usando apt o rpm, según el sistema operativo. Vi la lib "apt" para actualizar o actualizar el sistema, pero ¿es posible usarlo para instalar un solo paquete?Usando "apt-get install xxx" dentro de la secuencia de comandos de Python

yo estaba tratando de usar también "subproceso":

subprocess.Popen('apt-get install -y filetoinstall', shell=True, stdin=None, stdout=None, stderr=None, executable="/bin/bash") 

Pero este comando muestra todos los procesos en la cáscara, no puedo ocultarlo.

Gracias por su ayuda.

+0

Parece que no está recibiendo la bifurcación correctamente. ¿Has intentado leer la documentación? – bvd

+0

Para Python 3.5+, vea ['subprocess.run()'] (https://docs.python.org/3/library/subprocess.html#subprocess.run) – phoenix

Respuesta

10

Puede usar check_call en la biblioteca subprocess.

from subprocess import STDOUT, check_call 
import os 
check_call(['apt-get', 'install', '-y', 'filetoinstall'], 
    stdout=open(os.devnull,'wb'), stderr=STDOUT) 

volcar el stdout-/dev/null o os.devnull en este caso.

os.devnull es independiente de la plataforma, y ​​volverá /dev/null en POSIX y nul en Windows (que no es relevante, ya que está utilizando apt-get pero, bueno saber :))

+0

Gracias Russell! –

+0

@Cirux - De nada. –

+0

¡Gracias chicos! Yo uso parte de cada solución. Mi código: proc = subprocess.Popen ('apt-get install -y FILE', shell = True, stdin = None, stdout = open (os.devnull, "wb"), stderr = STDOUT, executable = "/bin/bash ") proc.wait() Agregado: stdout y.esperar Gracias una vez más –

0

Utilice esta opción para redirigir la salida a/dev/null:

proc = subprocess.Popen('apt-get install -y filetoinstall', shell=True, stdin=None, stdout=open("/dev/null", "w"), stderr=None, executable="/bin/bash") 
proc.wait() 

La llamada a .wait() bloqueará hasta que el apt-get es completa.

+0

Ah ok gracias, pero ¿cómo puedo detener el programa? , esperando la finalización de la instalación, ¿y cuándo está instalado, procesado con las otras funciones? –

+0

Actualicé mi respuesta por usted. –

+0

Hola hombre, muchas gracias de Argentina !!! –

3

Para esta tarea en particular, como una alternativa a subprocess puede considerar usar Fabric, una herramienta de implementación de python para automatizar compilaciones.

+0

El enlace que ha compartido da esto: Permiso denegado Usted no tiene los permisos adecuados para ver esta página. Por favor, póngase en contacto con el propietario de este proyecto para solicitar permiso. – Ayush

+0

@Ayush: enlace actualizado –

+0

Muchas gracias. – Ayush

2

¡Gracias a todos! Yo uso parte de cada solución. Mi código:

proc = subprocess.Popen('apt-get install -y FILE', shell=True, stdin=None, stdout=open(os.devnull,"wb"), stderr=STDOUT, executable="/bin/bash") 
proc.wait() 

Agregado: stdout y .wait

Gracias una vez más a Argentina!

Cuestiones relacionadas