使用“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")
但是这个命令显示了外壳程序中的所有进程,我无法隐藏它。
感谢您的帮助。
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.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
您可以使用
subprocess
库中的check_call
。将
stdout
转储到/dev/null
,或者在本例中为os.devnull
。os.devnull
与平台无关,并且在 POSIX 上返回/dev/null
,在 Windows 上返回nul
(这不相关,因为您是使用 apt-get 但是,还是很高兴知道:))You can use
check_call
from thesubprocess
library.Dump the
stdout
to/dev/null
, oros.devnull
in this case.os.devnull
is platform independent, and will return/dev/null
on POSIX andnul
on Windows (which is not relevant since you're usingapt-get
but, still good to know :) )谢谢大家!我使用每个解决方案的一部分。我的代码:
添加:stdout 和 .wait
再次感谢您来自阿根廷!
Thank guys ! I use part of each solution. My code:
Added: stdout and .wait
Thank you one more time from Argentina !
对于此特定任务,作为
subprocess
的替代方案,您可以考虑使用 Fabric< /a>,一个用于自动化构建的 python 部署工具。For this particular task, as an alternative to
subprocess
you might consider using Fabric, a python deployment tool to automate builds.这是对 Russell Dias 已接受答案的补充。这添加了一个 try 和 except 块来输出可操作的错误信息,而不仅仅是声明存在错误。
This is meant as an addition to Russell Dias's accepted answer. This adds a try and except block to output actionable error information rather than just stating there was an error.
使用它将输出重定向到 /dev/null:
对 .wait() 的调用将阻塞,直到 apt-get 完成。
Use this to redirect the output to /dev/null:
The call to .wait() will block until the apt-get is complete.