Я получаю немного странный результат от вызова subprocess.Popen, который, как я подозреваю, имеет много общего со мной, будучи совершенно новым для Python.Получение всего вывода из subprocess.Popen
args = [ 'cscript', '%USERPROFILE%\\tools\\jslint.js','%USERPROFILE%\\tools\\jslint.js' ]
p = Popen(args, stdout=PIPE, shell=True).communicate()[0]
Результаты в выходе, как в следующем (задней двойной \ г \ п есть в случае, если это важно)
Microsoft (R) Windows Script Host Version 5.8
Copyright (C) Microsoft Corporation. All rights reserved.\r\n\r\n
Если я запускаю эту команду из интерактивной оболочки Python это выглядит
>>> args = ['cscript', '%USERPROFILE%\\tools\\jslint.js', '%USERPROFILE%\\tools\jslint.js']
>>> p = subprocess.Popen(args, stdout=subprocess.PIPE, shell=True).communicate()[0]
Lint at line 5631 character 17: Unexpected /*member 'OpenTextFile'.
f = fso.OpenTextFile(WScript.Arguments(0), 1),
...
Lint at line 5649 character 17: Unexpected /*member 'Quit'.
WScript.Quit(1);
Таким образом, есть все выходные я на самом деле волнует, но если я сбросить значение «р» переменной я просто заносим ...
>>> p
'Microsoft (R) Windows Script Host Version 5.8\r\nCopyright (C) Microsoft Corpor
ation. All rights reserved.\r\n\r\n'
>>>
Где все эти данные, я хочу, чтобы все закончилось? Это определенно не закончилось в «р». Похоже, что это будет stdout, но я не сказал, чтобы я этого не делал?
Я бегу это на Windows 7 x64 с Python 2.6.6
Это должно быть 'p, e = Popen (...). Communication()' иначе вы сбрасываете stderr далеко –
Не так, как я его написал - stderr перенаправляется на stdout. Вам нужно указать 'stderr = subprocess.PIPE', если вам нужны отдельные потоки. – SimonJ
Если я только что вызвал .communicate() без переадресации stderr, это было не в кортеже, я вернулся. Однако перенаправление stderr сделало трюк, благодаря @SimonJ! – Tivac