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中的測試序列中.