Почему запуск сценария PowerShell из Python задерживается? - PullRequest
2 голосов
/ 15 ноября 2011

Когда я запускаю скрипт PowerShell из Python, задержка кажется примерно 45 с, и я не могу понять, почему.

Я пытаюсь запустить скрипт PowerShell (обращаясь к некоторым API, доступным только для PowerShell) из скрипта Python.

Я пробовал много перестановок, и все они имеют ~ 45 секундную задержку по сравнению с простым запуском сценария из командной строки с использованием идентичной командной строки.

Например - sample.ps1 может сказать:

echo foo

И runner.py может сказать:

import subprocess
p = subprocess.Popen([POWERSHELL, '-File', 'sample.ps1'], stdout=subprocess.STDOUT)
d = p.stdout.read()

Быстрый запуск сценария .ps1, запуск его через runner.py (Python 2.7, 32-разрядная на 64-разрядной машине) задерживается на 45 секунд.

Точно так же происходит, если я использую "os.system" или встроенные инструменты процесса Twisted. Так что я подозреваю, что между интерпретатором Python и интерпретатором Powershell существует некое тонкое взаимодействие, возможно, связанное с созданием консольных окон или обработкой потоков stdin / out / err? (что, как я знаю, «реально не существует» таким же образом в Windows)

Ответы [ 2 ]

0 голосов
/ 11 июля 2012

PowerShell загружает профиль вашего пользователя по умолчанию. Используйте аргумент -NoProfile, чтобы отключить это поведение:

import subprocess
p = subprocess.Popen([POWERSHELL, '-NoProfile', '-File', 'sample.ps1'], stdout=subprocess.STDOUT)
d = p.stdout.read()
0 голосов
/ 15 ноября 2011

Я не вижу таких задержек. Это довольно быстро. (это также будет зависеть от того, что на самом деле делает ваш скрипт.) Попробуйте использовать call:

from subprocess import call
call(["powershell", "sample.ps1"])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...