Я получаю некоторые данные с помощью команды powershell из python, не имея cmd в Windows! как я могу присвоить этот вывод строковой переменной?

#python #string #powershell #text-files

Вопрос:

Я получаю некоторые данные с помощью команды PowerShell из python, не имея cmd в Windows с помощью этой команды!

 import os
windows_info = os.system('powershell.exe get-physicaldisk')
 

и он успешно работает. но этот вывод дает результат ‘int’! Я попытался преобразовать это в строку, используя,

 windows_infoEG = str(windows_info)
 

но когда я попытался распечатать это, оно ничего не напечатает (но когда я проверяю его тип, он говорит «str»). как я могу превратить это в строку, чтобы записать вывод в текстовый файл!

это весь мой код.

  import os
    
    windows_info = os.system('powershell.exe get-physicaldisk')
    print(type(windows_info)) 
    
    windows_infoEG = str(windows_info)
    print(type(windows_infoEG)) 
    
    print(windows_infoEG)
    
    f = open("hardDriveInfo.txt", "w")
    f.write("Hard Drive Info"   windows_infoEG)
    f.close()
 

Спасибо!

Ответ №1:

os.system возвращает вам «код выхода» процесса (обычно 0 для успеха, ненулевой для сбоя). Вот почему вы получаете целое число. Он НЕ возвращает вам стандартный вывод команды. Для этого вам нужен subprocess модуль.

 windows_info = subprocess.check_output(['powershell.exe','get-physicaldisk']).decode('utf-8')
 

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

1. Я хотел бы добавить ссылку на документацию os.system : » subprocess Модуль предоставляет более мощные средства для создания новых процессов и получения их результатов; использование этого модуля предпочтительнее, чем использование этой функции».

2. Ну, это сложнее, чем это. os.system служит полезной цели. Одна из проблем заключается в том, что слово «результаты» неоднозначно. os.system Возвращает «результат» процесса, но если вы хотите подключить stdin и stdout, это не тот инструмент.