Использование" apt-get install xxx " внутри скрипта Python

в настоящее время мне нужно установить некоторый пакет, используя apt или rpm, в соответствии с ОС. Я видел lib " apt " для обновления или обновления системы, но можно ли использовать его для установки одного пакета?

Я тоже пытался использовать "подпроцесс":

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

но эта команда показывает весь процесс в оболочке, я не могу его скрыть.

Спасибо за помощь.

4 ответов


можно использовать check_call С subprocess библиотека.

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

свалка stdout to /dev/null или os.devnull в этом случае.

os.devnull является независимой от платформы и вернется /dev/null на POSIX и nul в Windows (что не имеет значения, так как вы используете apt-get но, все равно хорошо знать:))


для данной конкретной задачи, в качестве альтернативы subprocess можно использовать ткани, инструмент развертывания python для автоматизации сборок.


Спасибо, ребята ! Я использую часть каждого решения. Мой код:

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

добавлено: stdout and .ждать

спасибо еще раз из Аргентины !


используйте это для перенаправления вывода в /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()

звонок .wait () будет блокировать, пока apt-get не будет завершен.