Obecnie muszę zainstalować paczkę za pomocą APT lub RPM, zgodnie z OS. Widziałem lib "apt" do aktualizacji lub aktualizacji systemu, ale możliwe jest użycie go do zainstalowania pojedynczego pakietu?

Próbowałem użyć zbyt "subprocess":

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

Ale to polecenie pokazuje cały proces w powłoce, nie mogę go ukryć.

Dziękuję za pomoc.

9
Federico Sciarretta 13 grudzień 2011, 02:40

5 odpowiedzi

Najlepsza odpowiedź

Możesz użyć check_call z biblioteki {x1}}.

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

Zrzuć stdout do /dev/null, lub os.devnull w tym przypadku.

os.devnull jest niezależna platforma i powróci /dev/null na POSIX i {X2}} w systemie Windows (co nie jest istotne, ponieważ używasz apt-get, ale nadal dobrze wiedzieć :) )

10
Russell Dias 12 grudzień 2011, 22:55

Dziękuję chłopakach! 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ę jeszcze raz z Argentyny!

5
Federico Sciarretta 13 grudzień 2011, 12:06

W tym konkretnym zadaniu, jako alternatywę dla subprocess Możesz rozważyć użycie Tkanina, narzędzie wdrażania Pythona do automatyzacji budów.

3
Jeff Bauer 6 listopad 2017, 15:13

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()

Połączenie do .wait () zablokuje do zakończenia apt-get.

0
David K. Hess 12 grudzień 2011, 22:44

Ma to na celu uzupełnienie akceptowanej odpowiedzi Russella Dias. Dodaje to próby, z wyjątkiem bloku do wyjazdu do działania błędów działania, a nie tylko stwierdzenie, wystąpił błąd.

from subprocess import check_call, CalledProcessError
import os
try:
    check_call(['apt-get', 'install', '-y', 'filetoinstall'], stdout=open(os.devnull,'wb'))
except CalledProcessError as e:
    print(e.output)
0
saltchicken 26 wrzesień 2019, 00:30