gpt4 book ai didi

tcl - 获取TCL中open创建的进程返回码

转载 作者:行者123 更新时间:2023-12-04 21:11:41 27 4
gpt4 key购买 nike

现在我正在通过 open 调用外部 bash 脚本,因为该脚本可能会运行几秒钟,也可能会运行几分钟。唯一可以确定的是:

  • 它将输出必须显示给用户的文本。不是在脚本完成之后,而是在它仍在运行时。
  • 它将设置一个不同含义的返回码

  • 读取和使用 shell 脚本输出的文本确实有效。但我不知道如何阅读返回码。

    (简化的)TCL 脚本如下所示:
    #!/usr/bin/tclsh

    proc run_script {} {
    set script "./testing.sh"

    set process [open "|${script}" "r"]
    chan configure $process -blocking 0 -translation {"lf" "lf"} -encoding "iso8859-1"

    while {[eof $process] == 0} {
    if {[gets $process zeile] != -1} {
    puts $zeile
    }

    update
    }
    close $process

    return "???"
    }

    set rc [run_script]
    puts "RC = ${rc}"

    (简化的)shell 脚本看起来像这样:
    #!/bin/bash

    echo Here
    sleep 1
    echo be
    sleep 2
    echo dragons
    sleep 4
    echo ....
    sleep 8

    exit 20

    那么如何通过tcl读取shell脚本的返回码呢?

    最佳答案

    在关闭文件描述符以获取退出代码之前,您需要将文件描述符切换回阻塞状态。例如:

    您可以使用 try ... trap ,这是用 tcl 8.6 实现的:

    chan configure $process -blocking 1
    try {
    close $process
    # No error
    return 0
    } trap CHILDSTATUS {result options} {
    return [lindex [dict get $options -errorcode] 2]
    }

    另一种选择是使用 catch :
    chan configure $process -blocking 1
    if {[catch {close $process} result options]} {
    if {[lindex [dict get $options -errorcode] 0] eq "CHILDSTATUS"} {
    return [lindex [dict get $options -errorcode] 2]
    } else {
    # Rethrow other errors
    return -options [dict incr options -level] $result
    }
    }
    return 0

    关于tcl - 获取TCL中open创建的进程返回码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54126434/

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