Perl、Python和TCL脚本介绍
环境
软件
· LabVIEW
编程语言
· Python
在迁移到新的测试软件框架时重用现有代码的能力可以节省开发人员的时间和金钱。NI TestStand测试管理软件和NI LabVIEW都使用户能够直接调用以Perl、Python和TCL等多种语言编写的代码并与之集成。
本文研究了三种常用脚本语言--Perl、Python和TCL的基础知识。这是关于从TestStand调用脚本语言的三部分系列的第1部分,重点是工程师和科学家的需求。在第一部分中,我们将讨论Perl、Python和TCL的基本语法,并说明如何用这些语言编写简单的脚本。
导言
什么是脚本语言?
脚本语言是通常使用高级编程结构编写的编程语言,这使它们易于学习。虽然没有关于脚本语言构成的固定定义,但这些语言的一些共同特点包括:
§ 解释:脚本语言通常由解释器在运行时转换为机器级代码,而不是在运行前被编译成可执行文件。虽然这会导致性能下降,因为每一行都必须动态地进行解释,但它使系统之间的可移植性更加容易。
§ 无类型:变量可以用于保存任何类型的数据,而不必显式声明其类型。虽然这可以使您很容易遇到类型转换错误,但是它可以使语言更容易学习,并且可以提高脚本的可读性。
§ 本机复杂类型:大多数脚本语言也本机提供某些复杂的数据类型,如字符串、数组、列表和散列。
§ 垃圾收集:大多数脚本语言都会自动化垃圾收集(释放数据所使用的内存)。这可以减少内存泄漏发生的可能性。
脚本语言名称意味着什么?
Perl:表示实际的提取和报告语言。
Python:以BBC节目“Monty Python的飞行马戏团”命名
TCL:表示工具命令语言
运行脚本
安装解释器
运行脚本的第一步是下载一个解释器,该解释器将您的脚本转换为机器级语言。
在我们的教程和示例中,我们使用了ActiveState的免费解释器用于Perl、Python和TCL:
§ Perl:ActivePerl(5.10版)
§ Python:ActivePython(2.6版)
§ TCL:ActiveTcl(8.5版)
设置解释器
使用ActiveState的解释器的好处之一是安装程序将自动设置计算机的PATH环境变量,以便您可以从任何目录调用脚本。此外,它们还将与其解释器设置文件扩展名(.pl、.py、.tcl)的文件关联,以便通过调用脚本文件名直接运行脚本。
需要注意的一个警告是,默认情况下,ActiveTcl将将.tcl文件与Windows shell解释器-愿望-而不是命令行解释器关联起来。为了直接从命令行运行TCL脚本,需要修改.tcl文件关联以指向tcl命令行解释器-tclsh。以下方向将逐步将.tcl文件关联指向TCL命令行解释器。
1. 打开Windows资源管理器
2. 点击工具文件夹选项
3. 切换到文件类型附签
4. 在注册文件类型列表框,向下滚动到扩展tcl并选择它。
5. 这个以细节默认为愿望应用
6. 单击变化扣子
7. 在以对话框,单击浏览并选择ActiveTcl命令行解释器tclsh。
这默认为:
C:\tcl\Bin\tclsh<version_number>.exe
8. 单击好的按钮上的开着对话
9. 确保TCL扩展现在与Tclsh应用程序相关联。单击“应用”按钮。
注:如果使用ActivePerl、ActivePython和ActiveTcl以外的解释器,则可能必须手动设置PATH环境变量以指向解释器的可执行文件。有关如何在WindowsXP上执行此操作的说明,请参阅MicrosoftKnowledgeBase 310519:如何在WindowsXP中管理环境变量.
执行脚本
从命令行运行脚本的典型语法是:
<interpreter.exe> <script_filename > <command_line_arguments>
但是,由于我们已经将脚本文件扩展名与解释器关联起来,所以我们还可以使用以下命令行直接运行脚本:
<script_filename> <command_line_arguments>
为了确保正确安装解释器,可以尝试从命令行运行以下脚本。
§ Perl:
下载hello_world.pl
运行使用:perl.exe HelloWorld d.pl
§ Python:
下载hello_world.py
运行使用:python.exe HelloWorld d.py
§ TCL:
下载hello_world.tcl
使用:tclsh<version_number>.exe HelloWorld.tcl运行
编辑脚本
当您可以在任何文本编辑器(如记事本)或任何基于文本的开发环境(如LabWindows/CVI或者Microsoft Visual Studio,我们在ActiveState的免费集成开发环境中编写了我们的示例,Komodo编辑(5.0版)。我们之所以选择KomodoEdit,是因为它内置了支持这三种脚本语言的特性(自动完成、调用提示、语法着色和检查)。
基本语法
下面一节将介绍Perl、Python和TCL中使用的基本语法。您可以在这里下载整个示例:
脚本basics.zip
声明和使用标量变量
Perl
#Create a numeric variable
my $myNumber = 5;
#Create a string
my $myString = "Hello World";
#Create a new numeric and assign the original to it
my $myNewNumber = $myNumber;
Python
#Create a numeric variable
myNumber = 5;
#Create a string
myString = "Hello World";
#Create a new numeric and assign the original to it
myNewNumber = myNumber;
TCL
#Create a numeric variable
set myNumber 5;
#Create a string
set myString "Hello World";
#Create a new numeric and assign the original to it
set myNewNumber $myNumber;
将输出显示到标准输出(STDOUT)
Perl
#Print a string to the screen
print "Hello World\n";
#Print a string and a number
my $sum = 5;
print "The sum is: ", $sum, "\n\n";
Python
#Print a string to the screen
print "Hello World";
#Print a string and a number
sum = 5;
print "The sum is: ", sum, "\n";
TCL
#Print a string to the screen
puts "Hello World";
#Print a string and a number
set sum 5;
puts "The sum is: $sum \n";
声明和使用列表
Perl
#Declare a list with three elements
my @myList = (5, "foo", 3.14);
#The index of the last element is accessed by $#<listname>
print "Size of myList: ", $#myList + 1, "\n";
#Access a single element in the list
print "The second element in the list is: ", $myList[1], "\n\n";
Python
#Declare a list with three elements
myList = [5, "foo", 3.14];
#The length of the list is accessed by len(<listname>)
print "Size of myList: ", len(myList);
#Access a single element in the list
print "The second element in the list is: ", myList[1], "\n";
TCL
#Declare a list with three elements
set myList {5 "foo" 3.14};
#The index of the last element is accessed by llength
puts "Size of myList: [llength $myList]";
#Access a single element in the list
puts "The second element in the list is: [lindex $myList 1] \n";
从命令行读取用户输入(命令行参数)
Perl
#Command line arguments are stored in list ARGV
#Get number of arguments
print "Number of Command Line Arguments: ", $#ARGV + 1, "\n";
#Access individual argument
print "The first Command Line Argument is: ", $ARGV[0], "\n\n";
Python
import sys;
#Command line arguments are stored in list sys.argv
#Get number of arguments
print "Number of Command Line Arguments: ", len(sys.argv) - 1;
#Access individual argument
print "The first Command Line Argument is: ", sys.argv[1], "\n";
TCL
#Command line arguments are stored in list $argv and $argc
#Get number of arguments
puts "Number of Command Line Arguments: $argc";
#Access individual argument
puts "The first Command Line Argument is: [lindex $argv 0] \n";
从标准输入(STDIN)读取用户输入
Perl
#Read a user input from the keyboard (terminates on return key)
print "Enter value, and then press Enter: ";
my $myUserInput = <STDIN>;
Python
#Read a user input from the keyboard (terminates on return key)
myUserInput = raw_input("Enter value, and then press Enter: ");
TCL
#Read a user input from the keyboard (terminates on return key)
puts "Enter value, and then press Enter: ";
gets stdin myUserInput;
公共条件语句的语法
Perl
#if, elseif, else
if ($myNumber == 5)
{
print "My Number is Five \n";
}
elsif ($myNumber == 3.14)
{
print "My Number is Pi \n";
}
else
{
print "My Number is neither Five nor Pi \n\n"
}
#while loop
while ($myNumber != 0) #could do: until ($myNumber == 0)
{
print "My Number is: ", $myNumber, "\n";
$myNumber -= 1;
}
print "\n";
#for loop
for ($myNumber = 0; $myNumber < 5; $myNumber++)
{
print "My Number is: ", $myNumber, "\n";
}
print "\n";
#foreach loop
foreach my $currentElement (@myList)
{
print "The current element is: ", $currentElement, "\n";
}
Python
#if, elseif, else
if (myNumber == 5):
print "My Number is Five";
elif (myNumber == 3.14):
print "My Number is Pi";
else:
print "My Number is neither Five nor Pi \n";
#while loop
while (myNumber != 0):
print "My Number is: ", myNumber;
myNumber -= 1;
print "\n";
#for loop
for myNumber in range (0, 5):
print "My Number is: ", myNumber;
print "\n";
#foreach loop
for currentElement in myList:
print "The current element is: ", currentElement;
TCL
#if, elseif, else
if {$myNumber == 5} {
puts "My Number is Five \n";
} elseif {$myNumber == 3.14} {
puts "My Number is Pi \n";
} else {
puts "My Number is neither Five nor Pi \n\n";
}
#while loop
while {$myNumber != 0} {
puts "My Number is: $myNumber";
incr myNumber -1;
}
puts "\n";
#for loop
for {set myNumber 0} {$myNumber < 5} {incr myNumber} {
puts "My Number is: $myNumber";
}
puts "\n";
#foreach loop
foreach currentElement $myList {
puts "The current element is: $currentElement";
}
下一步
既然我们已经了解了这三种脚本语言的基本知识,我们就可以开始了。将脚本集成到TestStand中的测试序列中.