尝试在Tcl中写入more
子进程时,会发生broken pipe
错误。似乎more
异常退出。 e.g:
#!/usr/bin/env tclsh
set pager [open {| more} w]
for {set i 0} {$i < 10000} {incr i} {
puts $pager "$i foo"
}
close $pager
无法弄清楚出了什么问题。
BTW,如果使用less
代替more
,似乎没问题。
编辑:以下Python版本正常运行:
#!/usr/bin/env python3
import os
pager = os.popen("more", "w")
for i in range(10000):
pager.write("{} foo".format(i))
pager.close()
答案 0 :(得分:0)
问题是,当您关闭管道时,catch
进程会获得一个SIGPIPE信号使其退出,并且Tcl检测到由于信号而导致退出并产生该错误。
处理它的最简单方法是在close
周围放置一个#!/usr/bin/env tclsh
set pager [open {| more} w]
for {set i 0} {$i < 10000} {incr i} {
puts $pager "$i foo"
}
catch {close $pager}
。
less
或者,使用more
代替vmwareworkstation
;在输入管道的末尾不会以相同的方式退出(默认情况下)。