Система не может найти указанный файл ошибки в python

я хочу запустить следующую команду power-shell, используя скрипт python:

timedetail = subprocess.check_output('powershell.exe Get-WinEvent -LogName Microsoft-Windows-TerminalServices-LocalSessionManager/Operational  | Where { ($_.ID -eq "25" -or  $_.ID -eq "21") -and ($_.TimeCreated -gt [datetime]::Today.AddDays(-2))} |Select TimeCreated , Message | sort-Object -Property TimeCreated -Unique | Format-List', startupinfo=st_inf,shell=False,stderr=subprocess.PIPE, stdin=subprocess.PIPE).decode('ANSI').strip().splitlines()

но это не работает с кодом Python, это отображает ошибку:

[WinError 2] The system cannot find the file specified

кто-нибудь может помочь, как запустить команду powershell с помощью кода python?

заранее спасибо.


person Shreya    schedule 15.01.2021    source источник
comment
Похоже, вы хотите читать события из журнала событий Windows, вы пробовали модуль win32evtlog из pywin32? (См. также stackoverflow.com/questions/30287121/)   -  person Xtrem532    schedule 15.01.2021


Ответы (1)


Я бы использовал run вместо check_output. run был добавлен в Python 3.5 и рекомендуется использовать его до call, check_call или check_output. См. другой вопрос.

run возвращает CompletedProcess, который задокументирован здесь.

Вот обновленная версия вашего скрипта:

import subprocess


def run_powershell_command(command):
    completed = subprocess.run(["powershell", "-Command", command], capture_output=True)
    return completed


get_logs_command = 'Get-WinEvent -LogName Microsoft-Windows-TerminalServices-LocalSessionManager/Operational  | Where { ($_.ID -eq "25" -or  $_.ID -eq "21") -and ($_.TimeCreated -gt [datetime]::Today.AddDays(-2))} |Select TimeCreated , Message | sort-Object -Property TimeCreated -Unique | Format-List'
result = run_powershell_command(get_logs_command)

for line in result.stdout.splitlines():
    print(line)
person Munshine    schedule 15.01.2021