簡體   English   中英

iter(subprocess.Popen_instance.stdout.readline, '') 是一個繁忙的循環嗎?

[英]Is iter(subprocess.Popen_instance.stdout.readline, '') a busy loop?

讓我們考慮以下代碼構造:

p = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
for line in iter(p.stdout.readline, ''):
    print(line)

這個for循環是一個繁忙的循環,還是會懶洋洋地等待進程的輸出數據? 我該如何檢查? 不管答案如何,它是 CPython 語言規范或實現細節的一部分嗎?

我對主要操作系統(Windows、macOS、Linux)及其各自內核上的 Python 2.x 和 Python 3.x 都感興趣。

由於readline阻塞,循環只在有可供讀取的輸出時繁忙。

從命令行測試:

#!/usr/bin/env python

import subprocess
args = ('cat', '-')
p = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
for line in iter(p.stdout.readline, ''):
    print(line.rstrip('\n'))


$ ./x.py
a
a
b
b
<Ctrl-D>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM