You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Windows下subprocess.run()的timeout参数无法正常生效?

Windows系统下subprocess.run() timeout参数异常问题

我编写了一个简单的POC:

import subprocess

proc = subprocess.run('cmd', timeout=1, shell=True, capture_output=True)

这段代码并未在指定的1秒后抛出TimeoutError。经测试发现,subprocess.run()的timeout参数在Linux下可正常工作,但在Windows系统中存在异常。

例如:

import subprocess

proc = subprocess.run('ping -n 10 127.0.0.1', shell=True, capture_output=True, timeout=1)

该代码要等到命令执行完成后才会抛出超时错误。

测试代码及输出

C:\Users\zaid2\Documents>type t.py
import subprocess
import time

s = time.time()
try:
    roc = subprocess.run('ping -n 10 127.0.0.1', shell=True, capture_output=True, timeout=1)
finally:
    print(f'\nFinished in {round(time.time() - s)} seconds.\n\n')
C:\Users\zaid2\Documents>python t.py

Finished in 9 seconds.


Traceback (most recent call last):
  File "C:\Users\zaid2\Documents\t.py", line 6, in <module>
    roc = subprocess.run('ping -n 10 127.0.0.1', shell=True, capture_output=True, timeout=1)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\zaid2\AppData\Local\Programs\Python\Python311\Lib\subprocess.py", line 550, in run
    stdout, stderr = process.communicate(input, timeout=timeout)
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\zaid2\AppData\Local\Programs\Python\Python311\Lib\subprocess.py", line 1209, in communicate
    stdout, stderr = self._communicate(input, endtime, timeout)
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\zaid2\AppData\Local\Programs\Python\Python311\Lib\subprocess.py", line 1628, in _communicate
    raise TimeoutExpired(self.args, orig_timeout)
subprocess.TimeoutExpired: Command 'ping -n 10 127.0.0.1' timed out after 1 seconds

C:\Users\zaid2\Documents>python --version
Python 3.11.8

内容的提问来源于stack exchange,提问作者LuckyCoder3607

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 10:52:17