使用“apt-get install xxx” Python 脚本内部

发布于 2024-12-21 00:16:44 字数 304 浏览 2 评论 0原文

目前我需要根据操作系统使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

一个人的夜不怕黑 2024-12-28 00:16:44

您可以使用 subprocess 库中的 check_call

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 但是,还是很高兴知道:))

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 :) )

尴尬癌患者 2024-12-28 00:16:44

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

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

再次感谢您来自阿根廷!

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 !

橪书 2024-12-28 00:16:44

对于此特定任务,作为 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.

天邊彩虹 2024-12-28 00:16:44

这是对 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)

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.

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)
翻了热茶 2024-12-28 00:16:44

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

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文