Получение странных результатов при попытке захвата вывода с подпроцессом - PullRequest
0 голосов
/ 25 мая 2019

Использование ОС: Microsoft Windows [Версия 6.1.7601] (windows 7)
Использование версии Python: 3.7.2

Я пытаюсь использовать модуль подпроцесса для запуска некоторых команд и получения их выходных данных, чтобы я мог их проанализировать и автоматизировать на основе этого. Но при тестировании с захватом вывода я столкнулся с некоторыми странными результатами.

Я запустил этот код:

import subprocess;

command = subprocess.run(["dir"], shell=True, text=True, capture_output=True);

print(command.stdout);

И получил этот вывод:

$ pytest.py
 Volume in drive C has no label.
 Volume Serial Number is [redacted]

 Directory of C:\Users\[redacted]\tmp

25.05.2019  00:37    <DIR>          .
25.05.2019  00:37    <DIR>          ..
18.01.2017  15:25            16ÿ648 Install-WMF5.1.ps1
25.05.2019  18:47               142 pytest.py
13.01.2017  10:07        68ÿ054ÿ745 Win7AndW2K8R2-KB3191566-x64.msu
               3 File(s)     68ÿ071ÿ535 bytes
               2 Dir(s)  563ÿ220ÿ533ÿ248 bytes free


как видите, эти странные символы "ÿ" заменяют некоторые пробелы. Но, как ни странно, не все пробелы.

Что вызывает это? это проблема? Как я могу надежно захватить вывод?

1 Ответ

0 голосов
/ 25 мая 2019

Используйте check_ouput вместо run для запуска cmd.exe с флагом /u для кодирования результата в формате UTF-16.

Тогда decode это:

import subprocess

output = subprocess.check_output('cmd.exe /u /c "dir"').decode('utf-16')

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