python 用于检查和安装软件包的脚本

python script to check and install packages

我正在尝试编写 python 脚本来检查和安装 linux 中的软件包。我有两个问题:

首先,我尝试编写以下代码来检查包,但没有工作。我缺少的是如何将打印到终端转换为我可以检测到的变量。请找到代码。

试验#1

import apt
import os

x = os.system('apt-cache policy python3.6-dev')
if x>0:
    print('installed')
else:
    print('not installed')

试验#2

import os 

os.system('dpkg-query -l | grep python3.6-dev | wc -l')
x = os.system('echo $?')
if x>0:
    print('installed')
else:
    print('not installed')

其次,我尝试写一个python脚本来安装。但是,对于 linux 我们总是使用 sudo。我过去使用 gksudo 编写了这段代码。它正在工作,但现在它不工作了,因为他们删除了 gksudu。我怎样才能修改这段代码,我还能用什么来代替 gksudo

文件 #1(调用 RAM.py 文件)

import os
os.system('gksudo python RAM.py')

文件 #2(RAM 文件)

import os

# install
os.system('sudo apt-get install python3.6-dev')

首先,我建议您使用 subprocess 模块而不是 os。 为了执行 shell 命令并捕获 return 代码、stdout 和 stderr,您可以尝试:

from subprocess import run, PIPE
res = run('apt-cache policy python3.6-dev', shell=True, stdout=PIPE, stderr=PIPE, check=True)
print(res.returncode, res.stdout, res.stderr)

其中 check(可选)是在执行失败时引发异常 (returncode>0)。

为了 运行 带有 sudo 的命令,我建议如下:

password = "my_password"
base_command = "ls -l" # replace it with your command
command_with_sudo = f"echo {password} | sudo -S {base_command}"
res = run(command_with_sudo, shell=True, check=True, stdout=PIPE, stderr=PIPE)

请注意,将密码作为纯文本存储在代码中非常不安全,因此请尽量避免使用它(您可以将其作为参数提供给脚本/将其存储在您的环境中/以某种方式对其进行加密-只是不要将其保留在您的代码中)