我有这个subprocess.Popen()上下文管理器:
with Popen(
args=command, shell=False, stdout=PIPE, bufsize=1, universal_newlines=True
) as process:
# TIMING
start = timer()
lines = list(process.stdout)
end = timer()
print('Time taken:', end - start) # 53.662078000000065 seconds -> Linux
for _ in tqdm(iterable=lines, total=len(lines)):
sleep(0.1)
if process.returncode != 0:
raise CalledProcessError(returncode=process.returncode, cmd=process.args)
Run Code Online (Sandbox Code Playgroud)
list(process.stdout)在 WSL Linux 环境中运行时,处理时间似乎需要 53 秒。然而,当我在Windows环境中运行它时,只需要0.6秒。我觉得很奇怪为什么时间安排如此不同。
我尝试使用subprocess.run()andsubprocess.check_output()代替,但它们在处理循环之前仍然会导致相同的长时间滞后tqdm()。
我在这里错过了什么吗?我尝试查看文档以了解 Windows 与 WSL Linux 环境中使用的差异subprocess.Popen(),但我仍然不确定问题是什么。也许list(process.stdout)这里是不必要的,并且有更好的方法来存储来自标准输出的行。
任何形式的指导都会非常有帮助。