Как запустить 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 шт):

Автор решения: sixxxandeight

Попробуй сделать так, возможно решит твой вопрос :)

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 в скрытом режиме без появления окна.

→ Ссылка
Автор решения: Fox Fox
  • Для запуска Проводника не нужен 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")
→ Ссылка