OSError: [WinError 6] Дескриптор недопустим при выполнении команд powershell из pythom

#python #powershell

#питон #powershell

Вопрос:

При компиляции следующего кода с pyinstaller использованием следующей команды

 pyinstaller --onefile --uac-admin --noconsole test.py
 

он выдает следующую ошибку

   File "os.py", line 985, in popen
  File "subprocess.py", line 832, in __init__
  File "subprocess.py", line 1267, in _get_handles
OSError: [WinError 6] The handle is invalid
 

но при компиляции того же кода без --noconsole него все работает без каких-либо ошибок.

test.py

 from os import popen

def test_ps():
   result = popen('powershell.exe -encodedcommand ZQBjAGgAbwAgAGgAZQBsAGwAbwA= ').read()
   return result 

print(test_ps())
 

Конечная цель — выполнить команды powershell в скомпилированном скрипте pyinstaller без консоли с использованием опции --noconsole

ps команда encode предназначена просто echo hello для декодирования строки

 [System.Text.Encoding]::Unicode.GetString([System.Convert]::FromBase64String('ZQBjAGgAbwAgAGgAZQBsAGwAbwA='))
 

Комментарии:

1. Сообщение об ошибке предполагает, что процесс PowerShell пытается получить доступ к консоли, которая по определению не существует, из-за --noconsole . Вместо os.popen() этого вам, возможно , повезет subprocess.Popen() больше, что позволяет запускать powershell.exe без участия оболочки по умолчанию ( cmd.exe ) и позволяет настраивать привязку всех дескрипторов стандартного потока.