Using “apt-get install xxx” inside Python script

2019-01-23 08:55发布

currently I need to install some package using apt or rpm, according the OS. I saw the lib "apt" to update or upgrade the system, but it is possible use it to install a single package?

I was trying to use too "subprocess":

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

But this command shows all process in the shell, I cannot hide it.

Thank you for your help.

4条回答
兄弟一词,经得起流年.
2楼-- · 2019-01-23 09:05

For this particular task, as an alternative to subprocess you might consider using Fabric, a python deployment tool to automate builds.

查看更多
成全新的幸福
3楼-- · 2019-01-23 09:08

Use this to redirect the output to /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()

The call to .wait() will block until the apt-get is complete.

查看更多
够拽才男人
4楼-- · 2019-01-23 09:24

You can use check_call from the subprocess library.

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

Dump the stdout to /dev/null, or os.devnull in this case.

os.devnull is platform independent, and will return /dev/null on POSIX and nul on Windows (which is not relevant since you're using apt-get but, still good to know :) )

查看更多
啃猪蹄的小仙女
5楼-- · 2019-01-23 09:24

Thank guys ! I use part of each solution. My code:

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

Added: stdout and .wait

Thank you one more time from Argentina !

查看更多
登录 后发表回答