2011-12-12 9 views
6

Obecnie potrzebuję zainstalować pakiet za pomocą apt lub rpm, zgodnie z systemem operacyjnym. Widziałem bibliotekę "apt", aby zaktualizować lub zaktualizować system, ale możliwe jest użycie go do zainstalowania pojedynczego pakietu?Używanie "apt-get install xxx" wewnątrz skryptu Python

starałem się używać zbyt „podproces”:

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

Ale ta komenda pokazuje cały proces w powłoce, nie mogę ukryć.

Dziękuję za pomoc.

+0

Wygląda na to, że nie otrzymujesz prawidłowo rozwidlenia. Czy próbowałeś czytać dokumentację? – bvd

+0

Dla Pythona 3.5+ zobacz ['subprocess.run()'] (https://docs.python.org/3/library/subprocess.html#subprocess.run) – phoenix

Odpowiedz

10

Możesz użyć check_call z biblioteki subprocess.

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

Zrzutu stdout do /dev/null lub os.devnull w tym przypadku.

os.devnull jest niezależna od platformy, a powróci /dev/null na POSIX i nul na Windows (co nie jest istotne, ponieważ używasz apt-get ale nadal dobrze wiedzieć :))

+0

Dziękuję Russell! –

+0

@Cirux - Proszę bardzo. –

+0

Dziękuję chłopaki! Używam części każdego rozwiązania. Mój kod: proc = subprocess.Popen ('apt-get install -y FILE', shell = True, stdin = brak, stdout = otwarty (os.devnull, "wb"), stderr = STDOUT, executable = "/bin/bash ") proc.wait() Dodano: stdout i.czekać Dziękuję jeszcze raz –

0

Użyj tego, aby przekierować wyjście do/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() 

Wezwanie do .wait() będzie blokował aż apt-get jest kompletna.

+0

Ach ok, dzięki, ale jak mogę zatrzymać program , oczekiwanie apt kończy instalację, a kiedy jest zainstalowane, przetwarzane z innymi funkcjami? –

+0

Zaktualizowałem dla ciebie odpowiedź. –

+0

Hej człowieku, bardzo dziękuję z Argentyny !!! –

3

dla tego konkretnego zadania, jako alternatywnie do subprocess możesz rozważyć użycie Fabric, narzędzia do rozmieszczania Pythona, aby zautomatyzować kompilacje.

+0

Link został udostępniony daje to: Permission Denied Nie masz odpowiednich uprawnień, aby zobaczyć tę stronę. Skontaktuj się z właścicielem tego projektu, aby poprosić o pozwolenie. – Ayush

+0

@Ayush: link updated –

+0

Dziękuję bardzo. – Ayush

2

Dziękuję! Używam części każdego rozwiązania. Mój kod:

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

Dodano: stdout i .wait

Dziękuję raz jeszcze z Argentyny!