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

时间:2011-11-15 15:16:44

标签: python powershell

当我从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(Python 2.7,64位机器上的32位)运行它会导致45秒的延迟。

如果我使用“os.system”或Twisted的内置处理工具,就会发生同样的事情。所以我怀疑它是Python解释器和Powershell解释器之间的一些微妙的交互,可能与创建控制台窗口或处理stdin / out / err流有关? (我知道在Windows上不会“以相同的方式存在”)

2 个答案:

答案 0 :(得分:0)

我没有看到任何此类延迟。它非常活泼。 (这也取决于您的脚本实际执行的操作。)尝试使用call

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

答案 1 :(得分:0)

PowerShell默认加载用户的个人资料。使用-NoProfile参数关闭该行为:

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