如何在Tcl中写入寻呼机子进程?

时间:2017-10-30 03:07:15

标签: file-io tcl

尝试在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()

1 个答案:

答案 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;在输入管道的末尾不会以相同的方式退出(默认情况下)。