我需要通过tcl脚本运行具有多个文件句柄和用户数据的perl脚本,并生成结果输出文件。
tcl脚本(test.tcl)有以下行,并期望在folder1中生成perl脚本的结果输出文件。
protected Button MyButton1
test.pl代码如下。
exec perl \...\folder1\test.pl
这是代码的一部分,可变的“sum”将用于furtehr代码。最后,perl脚本将生成输出文本文件。如何使用tcl解释器提取perl脚本的用户数据并生成输出文件?
答案 0 :(得分:1)
只需将Tcl的stdio频道连接到perl's
即可exec perl test.pl <@stdin >@stdout 2>@stderr
答案 1 :(得分:0)
由于子流程(即perl
程序)涉及stdin
的多个用户输入,您必须从文件中提取它们。
% cat test.txt
10
20
% cat test.pl
print "Enter user data1: ";
my $data1 = <STDIN>;
print "Enter user data2: ";
my $data2 = <STDIN>;
my $sum = $data1 + $data2;
print "Result : $sum\n";
%
% exec perl test.pl < test.txt
Enter user data1: Enter user data2: Result : 30
%
如果您希望它是一个实际的交互式会话,那么您应该使用Expect
。
#!/usr/bin/expect
spawn perl test.pl
expect {
"data1: " {send "10\r";exp_continue}
"data2: " {send "20\r";exp_continue}
eof {puts "completed"}
}
输出
Enter user data1: 10
Enter user data2: 20
Result : 30
completed
参考: exec