gpt4 book ai didi

exec - 也需要存储重定向到标准输出的 tcl exec 结果

转载 作者:行者123 更新时间:2023-12-04 12:34:49 25 4
gpt4 key购买 nike

湖一看这两条线

案例 1

set cvsUpdStr [exec cvs -qn upd]

案例 2
set cvsUpdStr [exec cvs -qn upd >&@stdout]

对于第一种情况 cvsUpdStr是命令的输出,但在命令执行期间没有打印任何内容。对于第二种情况, cvs upd命令输出打印在屏幕上,但 cvsUpdStr是空的。如何组合它们以便打印出 cvs upd的结果并且还将在 cvsUpdStr 中存储相同的输出多变的?

最佳答案

有两种可能。要么将其作为管道运行(使用 open |... 创建)并通过存储和打印消息来处理传入的消息,或者使用 Unix tee公用事业。第二种选择绝对更简单!

# I like to spell out “update” in full
set cvsUpdStr [exec cvs -qn update | tee /dev/tty]
tee程序将其标准输入发送到其正常标准输出以及命名文件;我们使用 /dev/tty将其发送到当前终端。

但是请注意,您可能会在 cvs 的输出中遇到很长时间的延迟。由于它缓冲其输出。这只是将输出发送到非终端时 C 库 I/O 处理的默认行为,如果您需要立即输出,这可能是一个问题。解决这个问题非常复杂(你最终使用了 Expect)所以如果你对输出的突发性感到满意,那就别管它了……

在 Windows 上,您需要以另一种方式进行操作。
set pipe [open |[list cvs -qn update] "r"]
while {[gets $pipe line] >= 0} {
append cvsUpdStr "$line\n" ;# Note the \n at the end!
puts $line
}
close $pipe ;# Any errors turn up here!

带有 |[list ...] 的构造在 Tcl 术语中相当不寻常,但在这种情况下使用它是正确的。 (如果 open 的“文件名”的第一个字符是 | ,则参数的其余部分被视为用于构建管道的参数列表。)

关于exec - 也需要存储重定向到标准输出的 tcl exec 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12619111/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com