相关疑难解决方法(0)

subprocess.Popen 在 WSL Linux 上花费太长时间

我有这个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)这里是不必要的,并且有更好的方法来存储来自标准输出的行。

任何形式的指导都会非常有帮助。

python subprocess windows-subsystem-for-linux

4
推荐指数
1
解决办法
4132
查看次数