python скрипт для проверки и установки пакетов - PullRequest
1 голос
/ 07 апреля 2020

Я пытаюсь написать python скрипт для проверки и установки пакетов в linux. У меня два вопроса:

Сначала я попытался написать приведенный ниже код для проверки пакетов, но не работает. Чего мне не хватает, так это как я могу преобразовать печать в терминал в переменную, которую я могу обнаружить. Пожалуйста, найдите код.

Trial # 1

import apt
import os

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

Trial # 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')

1 Ответ

0 голосов
/ 07 апреля 2020

Прежде всего, я бы порекомендовал вам использовать модуль subprocess вместо os. Чтобы выполнить команду оболочки и захватить код возврата, 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)

Обратите внимание, что очень небезопасно хранить ваш пароль в виде простого текста в вашем коде, поэтому старайтесь избегать его (вы можете предоставить его в качестве аргумента для вашего скрипта / сохранить его в вашей среде / как-то зашифровать - просто не оставляйте его как есть в вашем коде)

...