Perl调用外部命令(其他脚本、系统命令)的方法和区别

1. `command`;

使用反引号调用外部命令能够捕获其标准输出,并按行返回且每行结束处附带一个回车。反引号中的变量在编译时会被内插为其值。

2. open LIST "ls -l|";
    open MORE "|more";
    @list=<LIST>;
    print MORE @list;
    close(LIST);
    close(MORE);
使用带管道的文件句柄来执行外部命令,使用方式与读写文件类似。可以从外部命令的输出读取数据,也可以将数据输出到外部命令作为输入。

3. system("command");
使用该命令将开启一个子进程执行引号中的命令,父进程将等待子进程结束并继续执行下面的代码。

  eg:system ("mkdir outdir ") unless (-d outdir);   #如果不存在outdir目录,就调用外部函数mkdir创建outdir目录

system会返回执行后的状态,即,如果正确执行完毕,返回0;没有执行返回非0

  eg: @args = (“mkdir″, “outdir″); system(@args) == 0  or die “system @args failed: $!”   <=>  system("mkdir outdir") == 0 or die "system @args failed: $!"

4. exec("command");
效果同system命令类似,区别是不会开启子进程,而是取代父进程,因此执行完引号中的命令后进程即结束。一般和fork配合使用。
而对于exec这个函数来说,仅仅是执行一个系统的命令,一般情况下并没有返回值。exec只有在系统没有你要执行的命令的情况下,才会返回false值

5. defined(my $pid=fork) or die "Can not fork: $!\n";
    unless ($pid) {
        exec ("date");
    }
waitpid ($pid,0);
使用fork将会开启子进程与父进程同时执行之后的代码,其中父进程中fork会返回一个非零的数,而子进程中将返回零。上面的代码完成和system("date")相同的功能。比起system单纯地调用外部命令,fork可以完成更加复杂的进程操作。


6.@result = readpipe( “ls -l /tmp” );
    print “@result”;

2) 而对于exec这个函数来说,仅仅是执行一个系统的命令,一般情况下并没有返回值。exec只有在系统没有你要执行的命令的情况下,才会返回false值。

exec (‘foo’)   or print STDERR “couldn’t exec foo: $!”;
{ exec (‘foo’) }; print STDERR “couldn’t exec foo: $!”;

3) 当我们需要保存系统命令运行的结果,以便分析并作进一步的处理时,就要用到readpipe这个函数了。例如:

@result = readpipe( “ls -l /tmp” );
print “@result”;

会产生如下的结果:

drwxr-xr-x  2 root   root    4096 Mar 19 11:55 testdir

当然,你也可以把生成的结果放到一个文件里,以便写工作日志呀、发布报告呀。

$inject_command = “./ConfigChecker.bat F:/nic/3502/ARRAY-4AD2E0573/etc “.$device_name;
chdir “F:/TestTools/bin/”;
@temp_result = readpipe($inject_command);
open(result_file,”>result.txt”);
print result_file @temp_result;
close(result_file);

这样,你就把系统运行的结果扔到了系统命令所在目录下的result.txt文件里了。

参考:

http://hi.baidu.com/develop_skill/blog/item/d69bc0cbf010da4ff31fe72b.html

http://cn.waterlin.org/

时间: 2024-10-24 12:10:51

Perl调用外部命令(其他脚本、系统命令)的方法和区别的相关文章

Perl调用外部命令的方式和区别

主要的方式简述如下:1. system("command");使用该命令将开启一个子进程执行引号中的命令,父进程将等待子进程结束并继续执行下面的代码. 2. exec("command");效果同system命令类似,区别是不会开启子进程,而是取代父进程,因此执行完引号中的命令后进程即结束.一般和fork配合使用. 3. `command`;使用反引号调用外部命令能够捕获其标准输出,并按行返回且每行结束处附带一个回车.反引号中的变量在编译时会被内插为其值. 4. o

PHP调用外部命令

------------------------------------------------------------------ 一.PHP调用外部命令总结                                                        二.安全问题 三.超时问题 ------------------------------------------------------------------ 一.PHP调用外部命令总结在PHP中调用外部命令,可以用, 1>调

关于调用外部命令时与外部命令的数据交互的注意点

前两天,我打算下载点图片.用fiddler分析了下,结果那个网页大量使用js来操作cookie,弄得我头大. go倒是有V8引擎的封装包,可是必须还得编译这个引擎,挺麻烦的. 想起来还有selenium-python可以用.就决定这个了.因为selenium没有python3.4的版本,不得不重装了python2.7. 多说一句,python3确实比python2的组织等各个方面改进很多,写起来感觉更好.可惜第三方库稀少是硬伤. 当时我的思路是这样的,用python和selenium来操作浏览器

Java调用Shell命令和脚本

1.介绍 有时候我们在Linux中运行Java程序时,需要调用一些Shell命令和脚本.而Runtime.getRuntime().exec()方法给我们提供了这个功能,而且Runtime.getRuntime()给我们提供了以下几种exec()方法: Process exec(String command) 在单独的进程中执行指定的字符串命令. Process exec(String[] cmdarray) 在单独的进程中执行指定命令和变量. Process exec(String[] cmd

Java调用Shell命令和脚本,致力于hadoop/spark集群

前言 说明的是,本博文,是在以下的博文基础上,立足于它们,致力于我的大数据领域! http://kongcodecenter.iteye.com/blog/1231177 http://blog.csdn.net/u010376788/article/details/51337312 http://blog.csdn.net/arkblue/article/details/7897396 第一种:普通做法 首先,编号写WordCount.scala程序. 然后,打成jar包,命名为WC.jar.

在android程序中调用shell命令与脚本

最近做android的一个功能就是调用shell命令来进行一些系统级别的操作,比如说是关机开机之类的,现在总结一下具体的用法以及遇到的坑(基于我所用到的,没用到的我就不说了) (1) Runtime.getRuntime().exec("ls"); 这是最简单的一种,你输入后就能就会执行ls命令,如果要获得输出的话可以这样写 Process p = Runtime.getRuntime().exec("ls"); String data = null; Buffer

java001-java调用shell命令和脚本

一.项目需求: 从某一机构获取证书,证书机构提供小工具,执行.sh脚本即可启动服务,本地调用该服务即可获取证书. 问题:linux服务器启动该服务,不能关闭.一旦关闭,服务即停止. 解决方案:java调用shell命令,利用spring容器启动即执行方案. 参考博文:http://zohan.iteye.com/blog/1709136 项目结构: 原码: 1.RuntimeUtils.java 1 package com.csvalue.common; 2 3 import org.sprin

Python 调用外部命令

python 可以使用 os 模块来调用外部的 Linux Shell 命令,常用的方法如下: (1) os.system():结果输出在终端上,捕获不到(2) os.popen() : 结果返回一个对象,即标准输出(3) os.popen2():结果返回两个对象,分别是标准输入,标准输出(4) os.popen3():结果返回三个对象,分别是标准输入,标准输出,标准错误输出(5) os.popen4():结果返回两个对象,分别是标准输入,标准输出(标准输出中包括标准错误输出) In [2]:

UFT脚本调用外部VBS函数的三种方法

第一种方法:ExecuteFile,利用该函数将外部vbs动态地加载进来,使测试脚本可以调用vbs文件的所有函数,调用语句写在下方,顺序不能颠倒,否则会报错.这个方法适用于QTP任何版本,但有个缺点,代码调试时不能跟踪到外部vbs的函数中,多少有些不便. ExecuteFile File File  String  The absolute or relative path of the file to execute. Example: ExecuteFile "c:\out.vbs"