2011-12-12 13 views
6

attualmente ho bisogno di installare alcuni pacchetti usando apt o rpm, secondo il sistema operativo. Ho visto lib "apt" per aggiornare o aggiornare il sistema, ma è possibile utilizzarlo per installare un singolo pacchetto?Utilizzando "apt-get install xxx" all'interno dello script Python

stavo cercando di usare troppo "sottoprocesso":

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

Ma questo comando mostra tutti i processi nella shell, non posso nasconderlo.

Grazie per il vostro aiuto.

+0

Sembra che tu non stia ottenendo il biforcuto correttamente. Hai provato a leggere la documentazione? – bvd

+0

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

risposta

10

È possibile utilizzare check_call dalla libreria subprocess.

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

dump del stdout a /dev/null, o os.devnull in questo caso.

os.devnull è indipendente dalla piattaforma, e tornerà /dev/null su POSIX e nul su Windows (che non è pertinente, in quanto si sta utilizzando apt-get ma, comunque bene sapere :))

+0

Grazie, Russell! –

+0

@Cirux - Sei il benvenuto. –

+0

Grazie ragazzi! Io uso parte di ciascuna soluzione. Il mio codice: proc = subprocess.Popen ('apt-get install -y FILE', shell = True, stdin = None, stdout = open (os.devnull, "wb"), stderr = STDOUT, eseguibile = "/bin/bash ") proc.wait() Aggiunto: stdout e.Aspettiamo Grazie ancora una volta –

0

Usare questo per reindirizzare l'output 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 chiamata a .wait() si bloccherà fino apt-get è completa.

+0

Ah ok grazie, ma come posso interrompere il programma , aspettando che apt finisca l'installazione e quando viene installato, acquisito con le altre funzioni? –

+0

Ho aggiornato la mia risposta per voi. –

+0

Ehi amico, grazie mille dall'Argentina !!! –

3

Per questo particolare compito, come in alternativa a subprocess potresti prendere in considerazione l'utilizzo di Fabric, uno strumento di distribuzione python per automatizzare le build.

+0

Il collegamento che hai condiviso dà questo: Autorizzazione negata Non si dispone delle autorizzazioni per visualizzare questa pagina. Si prega di contattare il proprietario di questo progetto per richiedere il permesso. – Ayush

+0

@Ayush: collegamento aggiornato –

+0

Grazie mille. – Ayush

2

Grazie ragazzi! Io uso parte di ciascuna soluzione. Il mio codice:

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

Aggiunto: stdout e .wait

Grazie ancora una volta da Argentina!

Problemi correlati