Как запустить powershell команду из python, без появления окна PS?
Подскажите, как отключить появление powershell окна при запуске скрипта внутри Python. В программе есть строка такого вида:
subprocess.check_output(['powershell.exe', 'start-process explorer'], universal_newlines=True)
Вроде нашел параметры на тихий запуск:
-nologo -noninteractive -windowstyle hidden
Но не могу понять, куда его вставить в коде... Также, с подобной командой на мгновенье тоже появляется окно PowerShell'a:
subprocess.Popen('powershell.exe -nologo -noninteractive -windowstyle hidden start-process explorer')
Ответы (2 шт):
Попробуй сделать так, возможно решит твой вопрос :)
import subprocess
# Задаем команду PowerShell
command = 'powershell.exe Get-ChildItem C:\\'
# Запуск команды PowerShell в скрытом режиме
subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True, creationflags=0x08000000)
Опция creationflags=0x08000000 используется для запуска PowerShell в скрытом режиме без появления окна.
Для запуска Проводника не нужен Powershell. Ну, допустим.
subprocess может выполнить скрипт Powershell или его текст.
Большая часть команд позволяет перенаправлять вывод с помощью: out-string, out-file, out-null. В этом случае "секретность" может и случиться.
Вот пример гибрида, результатом выполнения которого является список установленных драйверов, сохранённый в файле для дальнейшего использования в Питон. Никаких окон Powershell не появляется. Обратите внимание, выполняется скрипт Powershell так, как будто в родной среде. Результаты работы сначала направляются в строку (для того, чтоб убрать лишний мусор), а строка затем в файл:
import os
import subprocess
v_drivers = "drivers.txt"
v_command = r'''
set-executionpolicy -executionpolicy bypass -scope currentuser -force
(get-windowsdriver -online |
sort-object {[System.IO.Path]::GetFileName($_.originalfilename)}, {$_.version} |
select-object {$_.driver}, {$_.version}, {[System.IO.Path]::GetFileName($_.originalfilename)} |
format-table -hidetableheaders | out-string).trim() | out-file -filepath $v_drivers -encoding utf8
'''.replace("$v_drivers", v_drivers)
try: subprocess.Popen(["powershell.exe", v_command]).communicate()
except Exception as e: print(f"Ошибка формирования списка инсталлированных драйверов! Подробнее: {e}")
print("\nНажмите любую клавишу для продолжения...")
os.system("pause > nul" if os.name == "nt" else "read > /dev/null")