运行第三方程序:
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中得到字符,后把这个字符,反转后输出。
分享到:
相关推荐
python 打印信息重定向 GUI界面 ,PyQt5实时显示调用外部程序的实时输出显示,subprocess.Popen stdout输出重定向,备注详细!
重定向标准输出STDOUT的内容到文本框的demo
stdout.txt
分享一个JAVA StdOut的工具类,此工具类主要用于输出等一系列变换,推荐大家在我博客百度云盘下载。
主要介绍了详解使用python的logging模块在stdout输出的相关资料,需要的朋友可以参考下
今天小编就为大家分享一篇Python中的sys.stdout.write实现打印刷新功能,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
从输出中stdout.trim(),因此您不必执行stdout.trim() 。 支持二进制跨平台。 更高的最大缓冲区。 100 MB,而不是200 KB。 从stdout和stderr,类似于在终端上打印的stderr 。 更多描述性错误。 安装 $ npm ...
你的程序中有个方法会输出到标准输出中(sys.stdout)。也就是说它会将文本打印到屏幕上面。 你想写个测试来证明它,给定一个输入,相应的输出能正常显示出来。 解决方案 使用 unittest.mock 模块中的 patch() 函数...
《算法》中,使用StdOut.printf () 语句需要的algs4.jar文件 下载及配置。《算法》第四版的jar包08-02 《算法(第4版)》是Sedgewick之巨著,与高德纳TAOCP一脉相承,是算法领域经典的参考书,涵盖所有程序员必须掌握...
检查stdout或stderr是否是交互式的
在stdout的markdown中获取一个gif。
/usr/bin/env pythonimport syssys.stdout.write(“stdout1 “)sys.stderr.write(“stderr1 “)sys.stdout.write(“stdout2 “)sys.stderr.write(“stderr2 “)其中的sys.stdout.write也可以换成print。运行这程序,...
前端开源库-meta-execmeta exec,用于执行标准格式的同步命令到stdout的meta的exec插件
piper - 一个小devtool,旨在通过安全连接(TLS)从进程立即共享stdout
本人偶得在 Visual C++ 中进行输入输出重定向的办法,比通常的做法“freopen”更加的灵活和方便,特在此共享。目前,代码正在不断地摸索和完善中,先把“输出”(stdout)部分提供给大家
很多时候,我们为了方便调试,常常需要加入一些打印。 例如 Qt 中的 QDebug,C 和 C++ 中的 printf / ... 因此,需要一种能统一和标准化所有标准打印的方法( 所谓标准打印即标准输出 stdout ),并且能够动态配置。
is-interactive检查stdout或stderr是否是交互式的它检查流是否为TTY,而不是哑终端,并且不在CI中运行。 这对于决定是否在交互式交互中呈现交互式UI或动画很有用。检查stdout或stderr是否是交互式的。它检查流是TTY...
假执行 假child_process#exec输出以进行测试。安装 $ npm install fake-exec --save用法 // include dependenciesconst fake = require ( 'fake-exec' ) ;const exec = require ( 'child_process' ) . exec ;// set...
报价打印机 将励志名言打印到STDOUT 安装 $ npm install --save quote-printer 用法 var quotePrinter = require ( 'quote-printer' ) ; quotePrinter ( 'Rainbow' ) ; 执照 麻省理工学院:copyright: