为什么从Python运行PowerShell脚本似乎会延迟?

3 投票
2 回答
2263 浏览
提问于 2025-04-17 06:22

当我从Python启动一个PowerShell脚本时,似乎会有大约45秒的延迟,我搞不清楚为什么。

我想从一个Python脚本中运行一个PowerShell脚本(这个脚本需要访问一些只有PowerShell才能用的API)。

我尝试了很多不同的方式,但无论怎么做,都会比直接在命令提示符下运行脚本慢大约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(在64位机器上运行的32位Python 2.7)来运行时却要慢45秒。

如果我使用“os.system”或者Twisted的内置进程工具,情况也是一样。所以我怀疑这可能是Python解释器和PowerShell解释器之间的一些微妙互动,可能与控制台窗口的创建,或者输入输出错误流的处理有关?(我知道在Windows上这些流的“真实存在”并不是完全一样的)

2 个回答

0

PowerShell 默认会加载你用户的个人设置。如果你想关闭这个功能,可以使用 -NoProfile 这个参数:

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

我没有发现任何这样的延迟。运行起来很流畅。(这也取决于你的脚本具体在做什么。)试试用 call 命令:

from subprocess import call
call(["powershell", "sample.ps1"])

撰写回答