Получить вывод .exe-файла в Python3 в Windows - PullRequest
0 голосов
/ 20 сентября 2018

Я пытался получить вывод следующей команды manage-bde -status, которая отлично работает в моей командной строке windows cmd commande, но с использованием программы на python. Эта же команда не работает в подпроцессе pythonПоэтому мне пришлось запустить файл manage-bde.exe.

Итак, мой код выглядит следующим образом:

import os, platform, subprocess

################This part is only helpful for resolving 32 bit/64 bits issues##########
system_root = os.environ.get('SystemRoot', 'C:\\Windows');
if (platform.architecture()[0] == '32bit' and platform.machine() == 'AMD64'):
    system32='Sysnative'
else:
    system32='System32'

manage_bde = os.path.join(system_root, system32, 'manage-bde.exe')
print(manage_bde)
#######################################################################################

stdout=subprocess.check_output(['start',manage_bde,'-status'])
print('Output:'+stdout)

Я запускаю его из командной строки cmd, с Python 3.7.0.Проблема в том, что я получаю следующий вывод:

    C:\WINDOWS\Sysnative\manage-bde.exe (this is from my print(manage_bde))
    Traceback (most recent call last):
    File "testCLI.py", line 13, in <module>
    stdout=subprocess.check_output(['start',manage_bde,'-status'])
    File "d:\Profiles\user\AppData\Local\Programs\Python\Python3\lib\subprocess.py", line 376, in check_output
    **kwargs).stdout
  File "d:\Profiles\user\AppData\Local\Programs\Python\Python37-32\lib\subprocess.py", line 453, in run
    with Popen(*popenargs, **kwargs) as process:
  File "d:\Profiles\user\AppData\Local\Programs\Python\Python37-32\lib\subprocess.py", line 756, in __init__
    restore_signals, start_new_session)
  File "d:\Profiles\user\AppData\Local\Programs\Python\Python37-32\lib\subprocess.py", line 1155, in _execute_child
    startupinfo)
FileNotFoundError: [WinError 2] Specified file was not found

Я запускаю его с диска D :.Кто-нибудь знает, что я пропустил?

Ответы [ 2 ]

0 голосов
/ 21 сентября 2018

Да У меня достаточно прав для просмотра файла: os.stat (manage_bde) работает.Я изменил свои параметры, как предложил eryksun:

stdout = subprocess.getoutput([manage_bde, '-status'])

Теперь я могу запустить программу (но только с оболочкой с правами администратора) и получить вывод, спасибо!

0 голосов
/ 20 сентября 2018

Возможно, вам нужно запустить сценарий с правами администратора.

Если файл существует в файловой системе и вы получаете FileNotFoundError: [WinError 2], вы можете проверить, имеет ли сценарий достаточные разрешения для просмотра файла с:

os.stat(manage_bde)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...