根据操作系统,目前我需要使用apt或rpm安装一些软件包。 我看到lib“apt”更新或升级系统,但可以用它来安装一个软件包吗?
我试图使用“subprocess”:
subprocess.Popen('apt-get install -y filetoinstall', shell=True, stdin=None, stdout=None, stderr=None, executable="/bin/bash")
但是这个命令显示了shell中的所有进程,我无法隐藏它。
感谢您的帮助。
答案 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/null
或os.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)