[英]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.