2

我正在尝试编写一个 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')
4

1 回答 1

0

首先,我建议您使用subprocessmodule 而不是os. 为了执行 shell 命令并捕获返回码、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)

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

于 2020-04-07T06:54:53.713 回答