Python 3: Как использовать subprocess.run () в качестве администратора (windows 10) - PullRequest
2 голосов
/ 13 февраля 2020

Мне нужно запустить следующую информацию в командной строке windows. Кто-то любезно помог мне с синтаксисом subprocess.run (). Я получаю сообщение об ошибке «[WinError 5] Доступ запрещен», что потенциально требует прав администратора. Как я могу использовать subprocess.run () в качестве администратора? [Не на корпоративном p c или чем-либо еще, у меня есть доступ к правам администратора]

subprocess.run([
    r'"C:\Program Files\ANSYS Inc\ANSYS Student\v194\Framework\bin\Win64\runwb2"',
     '-B',
     '-F',
    r'E:\MEngA\Ansys\IFD_PartA_Rev3.wbpj',
     '-R',
    r'E:\MEngA\Results\sn07\script_partA.wbjn',
])

Если кто-то делал это раньше и знает, что «[WinError 5] Доступ запрещен» не относится к администратору прав, я тоже хотел бы услышать об этом! Заранее спасибо.

Редактировать - я видел следующий пост ( Запуск процесса от имени администратора с subprocess.run в python), но я не нахожу его слишком полезным. Я также прочитал Python do c (https://docs.python.org/3/library/subprocess.html) и не чувствую просветления.

Редактировать - я думаю, что это ближе:

processjl = subprocess.Popen(['runas', '/noprofile', '/user:Joe', r'C:\Program Files\ANSYS Inc\ANSYS Student\v194\Framework\bin\Win64\runwb2'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
processjl.stdin.write(b'pass')
stdout, stderr = processjl.communicate()

Но взамен я получаю:

Enter the password for Joe: \x00\r\n

Есть идеи? Я инженер-механик, изучающий python для автоматизации некоторых задач анализа методом конечных элементов. Я могу работать с данными в python, но у меня возникают проблемы с пониманием этого.

1 Ответ

3 голосов
/ 13 февраля 2020

Вы почти на месте, но вы не можете использовать runas, потому что он запросит у вас пароль. Вам нужно нечто подобное, позволяющее ввести пароль в командной строке:

https://docs.microsoft.com/en-us/sysinternals/downloads/psexec

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

psexec.exe -u username -p password command_line_here

Впоследствии ваша команда просто:

processjl = subprocess.Popen([
      'psexec.exe', '-u', 'username', '-p', 'password',
       r'C:\Program Files\ANSYS Inc\ANSYS Student\v194\Framework\bin\Win64\runwb2'
    ],
    stdin=subprocess.PIPE,
    stdout=subprocess.PIPE,
    stderr=subprocess.PIPE)
stdout, stderr = processjl.communicate()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...