我正在尝试编写python脚本以在Linux中检查和安装软件包。我有两个问题:
首先,我尝试编写以下代码来检查软件包,但无法正常工作。我所缺少的是如何将打印转换为终端到我可以检测到的变量。请找到代码。
import apt
import os
x = os.system('apt-cache policy python3.6-dev')
if x>0:
print('installed')
else:
print('not installed')
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使用其他什么]
import os
os.system('gksudo python RAM.py')
import os
# install
os.system('sudo apt-get install python3.6-dev')
首先,我建议您使用subprocess
模块而不是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
(可选)在执行失败时返回异常(返回码> 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)
请注意,将密码以纯文本形式存储在代码中非常[[不安全,因此请避免使用密码(您可以将其作为脚本的参数提供/在环境中存储/以某种方式对其进行加密-仅不要将其保留在您的代码中)