`

tcl 中的exec运行第三方,怎么同时打印第三方信息到stdout

阅读更多

运行第三方程序:

 

exec ?switches? arg ?arg ...? 

 

同时打印出信息到stdout呢?

exec ?switches? arg ?arg ...?  >@ stdout

 

这个方法还试验的不少次数,没有发现,因为tkcon中不支持这种,奇怪了。

tclsh中就支持。

 

当然,也可以用open |some program得到pipe后,在用fileevent $pipe readable [list Reader $pipe];来读pipe,这种方法可以过滤处理每一行的信息了。不过麻烦点儿,麻烦有麻烦的好处,在用【pid  $pipe】可以得到运行程序的pid,用[catch {close $pipe} err]还可以得到后台程序退出时的状态。

 

发现:

写道
exec ?switches? arg ?arg ...? &

 

其实只要在后台运行标准输入输出就自动重定向到前台程序上了。同样tclsh中这样行,tkcon不行,恨死tkcon,常常在这个上面做一些tcl的测试,有可以它做的GUI,这样可以改了一些东西。其实这种方法和第一种方法基本相似了。

 

 

比较好的介绍open和exec的文章:

http://www.tcl.tk/man/tcl/tutorial/Tcl26.html

 

例子:

set tempFileName invert_[pid].tcl
puts "1= $tempFileName"

# Open the output file, and
# write the program to it

set outfl [open $tempFileName w]

puts $outfl {
    set len [gets stdin line]
    if {$len < 5} {exit -1}

    for {set i [expr {$len-1}]} {$i >= 0} {incr i -1} {
        append l2 [string range $line $i $i]
    }
    puts " 2= $l2"
    exit 0
}

# Flush and close the file
flush $outfl
close $outfl

#
# Run the new Tcl script:
#
# Open a pipe to the program (for both reading and writing: r+)
#
set io [open "|[info nameofexecutable] $tempFileName" r+]

#
# send a string to the new program
#     *MUST FLUSH*
puts $io "This will come back backwards."
flush $io

# Get the reply, and display it.
set len [gets $io line]

puts "1= To reverse: 'This will come back backwards.'"
puts "1= Reversed is: $line"
puts "1= The line is $len characters long"

# Run the program with input defined in an exec call

set invert [exec [info nameofexecutable] $tempFileName << \
       "ABLE WAS I ERE I SAW ELBA"]

# display the results
puts "1= The inversion of 'ABLE WAS I ERE I SAW ELBA' is \n $invert"

# Clean up
file delete $tempFileName

 

例子就是建立了一个临时文件,运行这个文件用了两种方法,一个exec,一个open,运行的程序从stdin中得到字符,后把这个字符,反转后输出。

0
0
分享到:
评论

相关推荐

    Node.js-使用原生系统通知在node.js中不需要第三方库

    标题中的“Node.js-使用原生系统通知在node.js中不需要第三方库”表明我们要讨论的是如何在Node.js环境中利用操作系统自带的功能发送系统通知,而无需依赖任何外部的npm包。这种做法可以减少项目的依赖,提高运行...

    Makefile添加spdlog第三方库示例工程.tar.gz

    本文将深入探讨如何在Makefile中添加并使用第三方库,以`spdlog`为例,这是一个广泛使用的C++日志库,提供高性能且易于使用的日志功能。在Ubuntu 18.04系统中,我们将学习如何集成`spdlog`到你的项目中。 首先,...

    python 打印信息重定向 GUI界面 ,PyQt5实时显示调用外部程序的实时输出显示,subprocess.Popen stdout输出重定向,备注详细!

    python 打印信息重定向 GUI界面 ,PyQt5实时显示调用外部程序的实时输出显示,subprocess.Popen stdout输出重定向,备注详细!

    tcl语言资料/ug后处理的tcl语言

    在 TCL 语言中,有许多特殊变量用于存储各种信息。这些变量包括: * argc:表示命令行参数的个数 * argv:表示包含命令行参数的列表 * argv0:表示被解释的文件或由调用脚本的名称的文件名 * env:表示环境变量数组...

    重定向标准输出STDOUT的demo

    标准输出(STDOUT)通常是指程序运行时输出的信息,如打印在控制台的结果。当我们说“重定向标准输出STDOUT”,意味着我们将这些输出信息导向到别处,而不是直接显示在终端上。在本示例“重定向标准输出STDOUT的demo...

    Node.js检查stdout或stderr是否是交互式的

    总结来说,检查`stdout`或`stderr`是否是交互式的关键在于使用`process.stdout.isTTY`和`process.stderr.isTTY`属性,以及在必要时引入第三方库如`sindresorhus/is-interactive`来确保跨平台兼容性。理解这一点对于...

    Tcl输入输出重定向Demo

    在操作系统层面,程序的输入和输出通常通过标准输入(stdin)、标准输出(stdout)和标准错误(stderr)三个流来管理。重定向允许我们将这些流指向不同的位置,比如文件、网络连接甚至是其他进程的输入输出。在Tcl中...

    前端开源库-exec

    在前端开发中,有时我们需要与操作系统进行交互,执行一些后台任务,比如运行脚本、编译文件或系统命令。这就是`exec`函数的作用,它允许我们在JavaScript中安全地调用具有`exec`功能的子进程。`exec`是Node.js中的...

    Go-piper-一个旨在通过TLS从进程立即共享stdout的小devtool工具

    在 Go-piper 中,TLS 被用来加密 stdout 的传输,确保在共享过程中不会被第三方窃取或篡改,增强了数据的隐私保护。 Go-piper 的工作原理大致如下:首先,它创建一个本地服务器,该服务器监听特定端口并接收来自...

    stdout.txt

    从给定的文件信息来看,主要涉及的知识点集中在C++编程中的文件重定向、标准输入输出流(stdin, stdout, stderr)的管理以及Windows环境下的多线程编程。以下是对这些知识点的详细解析: ### 文件重定向与标准流...

    Go-exec一个golang包用于与一个在后台运行的进程进行交互

    Go-exec是Golang标准库中的一个包,它提供了一种方式来执行外部程序,并与这些程序进行交互。这个包在开发过程中非常有用,特别是在需要控制和管理其他系统进程时。让我们深入了解一下`os/exec`包的功能、用法以及...

    Python中的sys.stdout.write实现打印刷新功能

    ### Python中的`sys.stdout.write`实现打印刷新功能详解 #### 前言 在Python编程过程中,有时我们需要在控制台或终端中实时显示一些信息,比如进度条、定时任务的状态等,而不需要每次打印信息时都换行。这种情况...

    java执行可执行文件,Runtime.exec、ProcessBuilder、commons-exec

    本文将详细介绍三种常用的方法:`Runtime.exec()`、`ProcessBuilder`以及`commons-exec`库。 #### 1. 使用`Runtime.exec()` `Runtime.exec()`是最为传统且简单的执行外部程序的方法。它可以启动一个新的进程,并...

    外部exe程序嵌入到Qt界面,点击按钮在QT中运行显示

    在本文中,我们将深入探讨如何将外部的exe可执行程序集成到Qt界面中,并通过点击按钮在Qt界面上实现程序的运行与显示。Qt是一个功能强大的C++图形用户界面库,广泛应用于桌面应用开发,而将外部应用程序嵌入Qt界面...

    Qt实现简单的qDebug输出到日志文件

    本教程将详述如何使用Qt自带的`qDebug()`函数将其输出重定向到日志文件,而不依赖任何第三方库,适用于小型项目的需求。 首先,理解`qDebug()`函数。它是Qt提供的一个宏,用于方便地输出调试信息。默认情况下,这些...

    JAVA StdOut工具类下载

    分享一个JAVA StdOut的工具类,此工具类主要用于输出等一系列变换,推荐大家在我博客百度云盘下载。

    Python使用Paramiko控制linux第三方库.docx

    在上述示例中,我们使用了try-except语句捕获异常并打印错误信息。 5. **关闭连接**: 当完成所有操作后,务必关闭SSH连接以释放资源: ```python ssh_client.close() ``` 在实际项目中,为了代码的可复用性,...

    详解使用python的logging模块在stdout输出的两种方法

    这种方式更加灵活,因为它允许我们在日志系统中添加多个不同的处理程序,比如同时将日志输出到文件和控制台。 ```python import sys import logging # 创建日志记录器 log = logging.getLogger() # 创建一个...

    前端开源库-catch-stdout

    `stdout`通常用于打印日志、调试信息或错误消息,`catch-stdout`能够帮助我们更好地控制和管理这些输出,以便在测试环境中避免干扰,并收集必要的测试数据。 `catch-stdout`库的核心功能是提供一种方式来拦截...

    Go-shellexec这个Go提供了跨平台类似shell的命令行执行

    在Go语言中,`golang.org/x/sys/execabs`包中的`shellexec`模块为开发者提供了一种跨平台的方式来执行类似于shell的命令行操作。这个模块的主要目的是解决在不同操作系统上执行命令时遇到的兼容性问题,使得Go程序...

Global site tag (gtag.js) - Google Analytics