本节内容:
Perl调用外部命令的方式、Perl调用外部命令的区别。
一,Perl调用外部命令的方式
主要方式:
1,system("command");
使用该命令将开启一个子进程执行引号中的命令,父进程将等待子进程结束并继续执行下面的代码。
2,exec("command");
效果同system命令类似,区别是不会开启子进程,而是取代父进程,因此执行完引号中的命令后进程即结束。一般和fork配合使用。
3,`command`;
使用反引号调用外部命令能够捕获其标准输出,并按行返回且每行结束处附带一个回车。反引号中的变量在编译时会被内插为其值。
4,例子:
使用带管道的文件句柄来执行外部命令,使用方式与读写文件类似。可以从外部命令的输出读取数据,也可以将数据输出到外部命令作为输入。
,5例子:
使用fork将会开启子进程与父进程同时执行之后的代码,其中父进程中fork会返回一个非零的数,而子进程中将返回零。上面的代码完成和system("date")相同的功能。比起system单纯地调用外部命令,fork可以完成更加复杂的进程操作。
二,在Perl中用system、exec、readpipe函数来执行系统命令
在Perl中,可以用system、exec、readpipe这三个命令来调用其他脚本、系统命令等。
这三个命令的主要区别就是返回值。
1) 对于system这个函数来说,它会返回执行后的状态,例如:
当然,也可以用类似于下面的语句来检查出错的原因:
2) 而对于exec这个函数来说,仅仅是执行一个系统的命令,一般情况下并没有返回值。
exec只有在系统没有你要执行的命令的情况下,才会返回false值。
例如:
3) 当需要保存系统命令运行的结果,以便分析并作进一步的处理时,就要用到readpipe这个函数了。
例如:
输出结果:
drwxr-xr-x 2 root root 4096 Mar 19 11:55 testdir
当然,也可以把生成的结果放到一个文件中,这个很有用,生成报告日志啥的不错。
例子:
这样,你就把系统运行的结果扔到了系统命令所在目录下的result.txt文件里了。