Комбинация Python/Powershell — ускорьте загрузку pwsh

Мое основное программирование выполняется на Python, и я хочу вызывать написанные мной собственные командлеты Powershell. Добавил свой файл .psm1 в $PSModulePath, и мои командлеты всегда загружаются.

И я -NoProfile и -NoLogo вызываю pwsh cmd немного быстрее. Что-то вроде

cmd = ['pwsh', '-NoLogo', '-NoProfile', '-Command', cmdToRun]
process = Popen(cmd, stderr=PIPE, stdout=PIPE)

Но возврат/обработка по-прежнему занимает более 5 секунд.

Кто-нибудь знает, есть ли другие улучшения для еще более быстрого запуска сценариев PowerShell? ТИА

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
4
0
57
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Python не может размещать PowerShell внутри процесса, поэтому вы не можете избежать дорогостоящего создания дочернего процесса PowerShell с помощью pwsh , PowerShell (Core) 7 CLI (то же самое применимо аналогично powershell.exe, Windows PowerShell). интерфейс командной строки).

-NoProfile имел бы значение только в том случае, если бы присутствовали большие/медленно выполняющиеся файлы $PROFILE, а -NoLogo является избыточным, как это подразумевается -Command.

Если вам необходимо повторно выполнять вызовы PowerShell при одном вызове вашего приложения, вы можете смягчить влияние на производительность, запустив процесс PowerShell CLI в режиме REPL, передав -Command -, а затем подавая ему команды по требованию через стандартный ввод, завершая каждый из них двумя символы новой строки (чтобы обеспечить распознавание конца команды), аналогично подходу, описанному в этом посте.

В этом случае вы понесете штраф в виде создания дочернего процесса PowerShell только один раз за запуск вашего приложения, перед отправкой первой команды PowerShell.

Красава, спасибо за подробное объяснение! Глядя на это

scorpion35 19.06.2024 14:13

Рад слышать, что это помогло, @scorpion35.

mklement0 19.06.2024 17:57

Другие вопросы по теме