在Python脚本中使用“apt-get install xxx”

时间:2011-12-12 22:40:29

标签: python apt apt-get

根据操作系统,目前我需要使用apt或rpm安装一些软件包。 我看到lib“apt”更新或升级系统,但可以用它来安装一个软件包吗?

我试图使用“subprocess”:

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

但是这个命令显示了shell中的所有进程,我无法隐藏它。

感谢您的帮助。

5 个答案:

答案 0 :(得分:10)

您可以使用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转储为/dev/nullos.devnull

os.devnull与平台无关,将在POSIX上返回/dev/null,在Windows上返回nul(由于您使用的是apt-get,因此无关紧要,但仍然可以知道:))

答案 1 :(得分:3)

对于此特定任务,作为subprocess的替代,您可以考虑使用Fabric,一种用于自动构建的python部署工具。

答案 2 :(得分:3)

谢谢你们!我使用每个解决方案的一部分。我的代码:

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和.wait

再次感谢阿根廷!

答案 3 :(得分:0)

使用此选项将输出重定向到/ 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完成。

答案 4 :(得分:0)

这是对Russell Dias接受的答案的补充。这会添加一个try和except块,以输出可操作的错误信息,而不仅仅是声明存在错误。

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)