[英]python Popen hangs
我使用 Popen 打開 tclsh,並嘗試通過 PIPE 發送命令來運行puts aaaaaaaaaaa...
命令(aaa... 很長)
它工作正常,但是,當我運行命令兩次(aaaa... 需要足夠長的時間),並且我通過 PIPE 讀取標准輸出時,代碼將掛起
我試圖放大默認 bufsize,但它不起作用
到底發生了什么? 有人可以幫忙嗎?
proc = Popen(
['C:\\Tcl\\bin\\tclsh.exe'],
stdin=PIPE,
stdout=PIPE,
stderr=PIPE
)
proc.stdin.write(bytearray('puts ' + 'a' * 100000 + 'ends\n', 'utf-8'))
proc.stdin.write(bytearray('puts ' + 'a' * 100000 + 'ends\n', 'utf-8'))
proc.stdin.flush()
stdout = b''
while proc.poll() == None:
if stdout.endswith(b'ends'):
break
else:
stdout += proc.stdout.read1(1)
print(stdout.decode('utf-8'))
最后,我在標准輸出中使用 tempfile 代替 PIPE
self._tempfile = tempfile.mktemp()
self._tempfile_in = open(self._tempfile, 'wb')
self._tempfile_out = open(self._tempfile, 'rb')
self._process = subprocess.Popen(
[self.tcl_exe] + list(self.tcl_exe_args),
stdin = subprocess.PIPE,
stdout = self._tempfile_in,
stderr = subprocess.PIPE)
……
self._tempfile_out.read1(1)
pipe 緩沖區不是無限大的。 您填充了標准輸入緩沖區,然后 tclsh 填充了它的標准輸出緩沖區,並且它無法繼續讀取下一行,直到您從標准輸出中提取某些內容。 因此,您在第二次寫入時被阻止了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.