Perl调用外部命令的方式和区别
转自:http://hi.baidu.com/develop_skill/blog/item/d69bc0cbf010da4ff31fe72b.html
主要的方式简述如下:
1. system("command");
使用该命令将开启一个子进程执行引号中的命令,父进程将等待子进程结束并继续执行下面的代码。

2. exec("command");
效果同system命令类似,区别是不会开启子进程,而是取代父进程,因此执行完引号中的命令后进程即结束。一般和fork配合使用。

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

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

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


 
在Perl中用system、exec、readpipe函数来执行系统命令
转自:http://cn.waterlin.org/
在Perl中,可以用system、exec、readpipe这三个命令来调用其他脚本、系统命令等。这三个命令的主要区别就是返回值。
1) 对于system这个函数来说,它会返回执行后的状态,比如说
@args = (“command”, “arg1″, “arg2″);
system(@args) == 0
or die “system @args failed: $?”
当然,你也可以用类似于下面的语句来检查出错的原因:
if ($? == -1) {
print “failed to execute: $!\n”;
}
elsif ($? & 127) {
printf “child died with signal %d, %s coredump\n”,
($? & 127),  ($? & 128) ? ‘with’ : ‘without’;
}
else {
printf “child exited with value %d\n”, $? >> 8;
}
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文件里了。
完!

转载于:https://blog.51cto.com/yanwang/908926

[转]perl里使用外部命令相关推荐

  1. perl里嵌套shell命令转义符_Linux-包教包会系列之-shell

    前言 还记得当年被 bat 支配的恐惧.比起 shell 脚本写 bat 脚本真的很费劲. 既然你能搞明白 java js 等这些高级语言,弄明白 shell 也是很简单的.学会简单的语法,再看看 t ...

  2. jdk12‘javac‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。

    前言: 安装JDK12遇到的问题以及学习过程, 我第一次用网上的安装办法,下载EXE后,配置好三个环境变量后运行,不行. 解决过程: 问题1:安装后javac命令运行时报错 jdk12'javac' ...

  3. Go 学习笔记(43)— Go 标准库之 os/exec(执行外部命令、非阻塞等待、阻塞等待、命令输出)

    1. 概述 golang 下的 os/exec 包执行外部命令包执行外部命令.它包装了 os.StartProcess 函数以便更容易的修正输入和输出,使用管道连接I/O,以及作其它的一些调整. 与 ...

  4. Vue项目碰到‘webpack-dev-server’不是内部或外部命令,也不是可运行的程序或批处理文件报错...

    最近公司里做vue项目,svn了前端同事的项目代码,装好环境,运行项目(安装步骤随便百度一下,很详细), 控制台里报错"'webpack-dev-server'不是内部或外部命令, 也不是可 ...

  5. Python 技术篇-pip安装提示:‘pip‘ 不是内部或外部命令,也不是可运行的程序或批处理文件,问题解决方法

    问题展示: 之前还是好的,现在就不能用了. C:\Users\Administrator>pip 'pip' 不是内部或外部命令,也不是可运行的程序或批处理文件. 解决方法: 首先我们在 pyt ...

  6. BAT批处理文件无法运行提示“/E /I /Y ‘XCOPY‘ 不是内部或外部命令,也不是可运行的程序或批处理文件”解决方法

    windows 下的 system32 文件夹里包含了很多运行程序,其中就包括运行 bat 文件的程序. 环境变量中添加 C:\windows\system32; 或 %SystemRoot%\sys ...

  7. win10下处理“xxx不是内部或外部命令,也不是可运行的程序或批处理文件”

    用cmd调用某一命令的时候,经常会出现"xxx不是内部或外部命令,也不是可运行的程序或批处理文件",怎么处理这个问题呢? 看看命令有没有拼错 看看计算机里有这个程序不 看看path ...

  8. 'mysql' 不是内部或外部命令,也不是可运行的程序或批处理文件

    今天安装完MYSQL8.0的版本,根据课本的提示,在CMD里运行,出现了'mysql' 不是内部或外部命令,也不是可运行的程序或批处理文件.在网上搜了一下,他的解决方法是这样的: 1.设置一下环境变量 ...

  9. Windows中的命令行提示符里的Start命令执行路径包含空格时的问题

    转自:http://www.x2009.net/articles/windows-command-line-prompt-start-path-space.html 当使用Windows 中的命令行提 ...

最新文章

  1. ICRA 2021 | VINS 研讨会概要(附完整视频)
  2. 伺服驱动器接线怎么画_百格拉伺服驱动器维修常见故障现象及处理方法
  3. Android Studio下加入百度地图的使用 (一)——环境搭建
  4. 我对模板模式和策略模式的理解
  5. 深度学习中常见的损失函数
  6. gamma分布_深度学习需要掌握的 13 个概率分布(附代码)
  7. 谁在窥屏_TheShy直播被窥屏搞怕了,为了防止被窥屏,这个做法绝了
  8. 【剑指offer】面试题04:二维数组中的查找(java)
  9. 剪辑内核linux,Linux01-Linux编辑内核定制属于自己的内核49
  10. 用python解方程和微积分
  11. 百度大脑人脸离线识别SDK Windows版
  12. ie浏览器中图片被拉长
  13. oracle数据库表数据误删除恢复
  14. new(创建)一个对象时都发生了什么?
  15. 用电脑无线投屏到电视屏幕的连接方法
  16. Power bi 超市运营数据分析
  17. speedoffice(Excel)如何插入子表?
  18. 个性定制礼品将取代原有礼品市场成主流
  19. Creo Simulat 4.0有限元分析视频教程 料材 结构 网格 装配 散热分析
  20. MySQL万字总结!超详细!

热门文章

  1. 《jQuery EasyUI开发指南》——导读
  2. Android系列之Fragment(三)----Fragment和Activity之间的通信(含接口回调)
  3. ios-UIViewController和魔态视图的应用以及设备支持方向的设置
  4. 编写 iPhone Friendly 的 Web 应用程序 (Part 6 - iUI)
  5. C#GDI绘制自定义字体
  6. db2建库、建表空间基本流程
  7. linux从一台服务器传输文件到另一台服务器上
  8. MySQL之级联删除、级联更新、级联置空
  9. 编程的一些经历和感想
  10. python模块之random模块