Как запустить программу от имени администратора python

В программировании очень часто возникает необходимость запускать команды системы из скрипта. Однако, не все команды можно выполнить обычным пользователем. Для выполнения некоторых команд необходимы права администратора. В этой статье мы разберемся, как запустить команду с правами администратора при помощи модуля os в языке Python.

Модуль os предоставляет набор функций для взаимодействия с операционной системой. Одна из таких функций – os.system(). Она позволяет выполнить произвольную команду операционной системы. Рассмотрим на примере, как выполнить команду ping:

import os os.system(«ping www.python.org»)

Этот код напечатает результат выполнения команды ping в консоли Python.

Теперь представим, что нам нужно выполнить команду с правами администратора. Для этого в Windows мы можем использовать команду runas, указав имя пользователя и пароль администратора.

import os os.system(«runas /user:Администратор ping www.python.org»)

Здесь мы использовали команду runas для запуска команды ping от имени пользователя Администратор. Она запросит у нас пароль для пользователя Администратор.

Как запустить Файл или Программу от имени Администратора

Однако, такой код может поставить под угрозу безопасность системы. Пароль администратора может попасть в чужие руки. Лучше всего использовать модуль subprocess для запуска команд системы.

Модуль subprocess является более безопасным способом для выполнения команд системы, чем os.system(). Он позволяет сделать более сложные вещи, например, захватывать потоки вывода от команды и работать с ними.

Для выполнения команды с правами администратора мы можем использовать следующий код:

import subprocess import sys if sys.platform.startswith(‘win’): # определение операционной системы subprocess.Popen([«runas», «/user:Администратор», «ping», «www.python.org»]) else: subprocess.Popen([«sudo», «ping», «www.python.org»])

Здесь мы используем Popen для выполнения команды. Если операционная система – Windows, то мы используем команду runas, а если Linux – команду sudo. Важно отметить, что Windows не позволяет запускать приложения с правами администратора, если в имени пользователя используются символы кириллицы. В этом случае потребуется создать пользователя без использования кириллицы в имени.

Читайте также:
Лучшая программа djvu Андроид

Кроме того, мы можем использовать следующую функцию, чтобы запустить программу от другого пользователя:

def run_as_admin(cmd_line=None, wait=True): if os.getuid() == 0: raise ValueError(«Especially, I refuse to run as root») cmd_exe = os.environ.get(«COMSPEC», «cmd.exe») args = [‘/c’] args += cmd_line.split(‘ ‘) process_info = subprocess.STARTUPINFO() process_info.dwFlags |= subprocess.STARTF_USESHOWWINDOW process_info.wShowWindow = subprocess.SW_SHOWDEFAULT process = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE, startupinfo=process_info, shell=False) if wait: process.wait() output, error = process.communicate() output = output.decode(‘cp866’) error = error.decode(‘cp866’) return process, output, error else: return process

Здесь мы используем стандартную Windows-консоль (cmd.exe) для выполнения команды, запущенной от пользователя Администратор. Это позволяет использовать все команды и сценарии, доступные в Windows. Кроме того, мы можем установить параметр wait в False, чтобы выполнение скрипта не блокировалось, пока команда не завершится.

Как выполнить Python код с правами Администратора?!

Вывод команды можно получить, используя атрибуты stdout и stderr объекта process. Также можно установить параметр stdout=subprocess.PIPE для перенаправления вывода команды в поток Python.

В итоге, модуль os в Python позволяет запускать произвольные команды системы, в том числе и с правами администратора. Для этого можно использовать функцию os.system() или модуль subprocess. Важно учитывать, что запуск команд от администратора может быть опасным для безопасности системы. Лучше всего использовать способы, позволяющие минимизировать риски.

Похожие записи:

  1. Импорт модуля и вызов функции из этого модуля по имени функции
  2. Автозагрузка от имени администратора(Python)
  3. Как выполнить команду от имени суперпользователя с помощью Bash?
  4. Выполнить команду, если ошибка — выполнить вторую команду Python
  5. Как запустить программу от имени администратора в Windows?

Источник: qaa-engineer.ru

Русские Блоги

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

Подводя итог, существует три способа их получения, которые представлены ниже.

1. Запустите cmd от имени администратора

Этот метод очень прост, и, само собой разумеется, щелкните правой кнопкой мыши, чтобы запустить от имени администратора, а затем запустите скрипт Python, чтобы получить права администратора.

2. Получить с помощью сценария cmd

Предположим, файл, который я хочу запустить test.py Тогда я могу написать сценарий cmd, который может быть вызван go.cmd Написать в:

Сохранить с test.py Положите в ту же папку, дважды щелкните go.cmd Запустите, появится всплывающее окно, нажмите «Да», запустите от имени администратора test.py A.

Читайте также:
Программа чтобы выйти замуж

3. Получите это с кодом Python

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

from __future__ import print_function import ctypes, sys def is_admin(): try: return ctypes.windll.shell32.IsUserAnAdmin() except: return False if is_admin(): # Добавьте код для запуска здесь else: if sys.version_info[0] == 3: ctypes.windll.shell32.ShellExecuteW(None, «runas», sys.executable, __file__, None, 1) else:#in python2.x ctypes.windll.shell32.ShellExecuteW(None, u»runas», unicode(sys.executable), unicode(__file__), None, 1)

Когда приведенный выше код выполняется, сначала определите, есть ли у него права администратора. Если нет, то вызовите эту функцию, чтобы получить разрешения, а затем снова запустите код, поэтому, если он запускается в командной строке, появится маленький черный ящик. И согласно оригинальному блогу, это не может быть запущено в IDE, но у меня нет IDE, поэтому я не тестировал его.

4. UAC решение не всплывает

Некоторые люди могут использовать методы 2 и 3, описанные выше, чтобы обнаружить, что поле с маркером авторизации не появится. Это может быть из-за того, что UAC системы отключен. Для включения выполните следующие действия:

  1. win + R, введите в поле выполнения msconfig .
  2. Нажмите наинструментИ нажмитеИзменить настройки UAC, А затем нажмите в правом нижнем углуначало.
  3. Настройте уведомление наВсегда уведомлять.

Источник: russianblogs.com

Python Запуск команды от Админа Windows

PowerShel+Python = RunAsAdmin

Ух… полдня нервов, криков, пота и крови. Я искал как запустить от доменного админа программу. Это жесть. Перепробовал тысячи вариантов и способов. А также пытался понять как мне с reg.exe удаленно работать.

Также понял что comanda password у знаменитой утилиты PsExec не работает как должна. Но все по порядку…

Os.system против Subprocess.popen

А началось все с того, что мне надо было как-то незаметно запустить для пользователя архивацию. И тут есть замечательная команда os.system:

import os zip_pass = ‘SuperPassword’ log_path = ‘E:\path\to\dir’ os.system(‘7zip a -tzip -ssw -mx1 -p’+zip_pass+’ -r0 -sdel ‘ + log_path + ‘\back_%DATE:~6,4%%DATE:~3,2%%DATE:~0,2%.zip ‘ + log_path + ‘\*.png > nul’ )

Однако я это делаю в цикле и при выполнении команды появляется окно cmd. Это меня не устраивало и я искал другой путь. Попробовал subprocess. Все заработало:

Читайте также:
Кто был ведущим программы в мире животных

import pyscreeze ,subprocess from time import sleep zip_pass = ‘SuperPassword’ log_path = ‘E:\path\to\dir’ def screnshot(): # скрин цикл while True: sleep(120) # Pereod making screnshot in sec. try: pyscreeze.screenshot(log_path + ‘\’ + strftime(«%Y-%m-%d-%H.%M.%S», localtime()) + ‘.png’) except Exception: pass subprocess.run(str(exe7z + ‘ a -tzip -ssw -mx1 -p’+zip_pass+’ -r0 -sdel ‘ + log_path + ‘\back_%DATE:~6,4%%DATE:~3,2%%DATE:~0,2%.zip ‘ + log_path + ‘\*.png > nul’).split(‘ ‘), shell=True) # Making arhive screnshot()

Если вы хоть чуть разбираетесь, вы поймете зачем мне бекапиться так часто)))). Но это пол беды. Надумал я ко всему этому бреду добавить проверку и установку забикс. Написал довольно не плохой скрипт установки, но вот беда мне надо его запустить от доменного админа. И тут началось…

Пути неисповедимы или чертов RunAs

Только есть одно «НО» — это не работает начиная с Vista Windows. А все потому, что ради безопасности runas не читает stdin. По этой же причине я 4 часа не мог запустить следующее:

В общем я понял проблему и начал искать обходные пути. Потратив еще час и перебрав разные варианты я нашел ка это можно сделать с помощью PowerShell . Но не все так просто.

Первое знакомство с PowerShell и…

Ни хрена не понятно. Хотя вроде ни чего сложного. Но найденный тут рецепт а именно :

$username = ‘user’ $password = ‘password’ $securePassword = ConvertTo-SecureString $password -AsPlainText -Force $credential = New-Object System.Management.Automation.PSCredential $username, $securePassword Start-Process Notepad.exe -Credential $credential

Не сработал. А вот спустя еще час мучения и лицезрения неверно задано имя папки я понял. Это же DOS! Я вспомнил как у меня были проблемы с тем что я не мог находясь в одном разделе диска вызвать программу из другого. Поняв это я решил проблему, а заодно понял как написать все в одну строку:

Но и тут не без нюансов. Все команды через «;» а путь у Start-Process не должен выходить в TMP папку. Ну и полный запуск на python.

Запуск батника из python с правами админа

Вот так я про#бал мой первый день отпуска. Надеюсь еще напишу более подробную статью о том как я свой кейлогер с бекджеком и шлюхами писал…. Удачи!

Источник: hostlip.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru