为何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
相关产品推荐
相关产品推荐

