在perl中嵌入shell命令
2010-06-22 17:56
141 查看
在linux中,如果要把几个可执行程序结合起来使用,一般是采用shell或者perl,当然,python也可以。
这里说一下在perl里嵌入shell命令的情形。
一般来说,最简单的方式就是采用“(qx//)就可以执行命令
这样命令就执行了,但是却并没有输出。要输入的话,简单的可以这么处理:
这里,如果程序有输入,那就不行了,后面再细说。
下面看看另外一种方式,即system执行命令,它可以返回程序的退出状态,也就是说它可以判断程序执行是否成功,我们也可以拿它来做个有趣的东西,看下面的程序:
这是一个c++程序,我们把程序的退出状态设定为输入参数的第1和第2个参数的第一个字符代表的数字的和。通过g++,我们把它编译为add程序: g++ add.cc -o add
那么利用perl的system函数,就可以捕获这一退出状态:
输出4
也就是说我们可以利用其他程序来为perl做计算,这个是不是有点像dll的味道? :)
但是这里有个缺点,就是程序的退出状态必须是整数。
那么perl是不是就没办法做这件事了呢? 我要说是,很多perl的fans肯定不乐意了,既然perl强大,我们就见识一下它怎么来做这件事吧
我们把那个c++程序改一改:
我们用这个程序来输出第一个参数的第一个字符的ascii码,在perl里我们这么来使用:
输出 a:97
怎么样,是不是更有dll的味道了?
最后来说一下如果调用的程序里有输入,又该怎么处理呢? 我们再把c++程序改一改
这个程序让用户手动输入字符,打印字符的ascii码,来看在perl中的调用
输出:
input a char:
a
97
解释一下为什么第一个endl很重要,因为在输出的时候,无法同时处理输入和输出,所以加换行,让输入单独在一行。
这里说一下在perl里嵌入shell命令的情形。
一般来说,最简单的方式就是采用“(qx//)就可以执行命令
1 2 | $cmd = "du * sh"; `$cmd`; |
1 | print `$cmd`; |
下面看看另外一种方式,即system执行命令,它可以返回程序的退出状态,也就是说它可以判断程序执行是否成功,我们也可以拿它来做个有趣的东西,看下面的程序:
1 23 | #include <iostream> using namespace std; int main(int argt, char* argv[]){ int a = (int)argv[1][0]-48; int b = (int)argv[2][0]-48; cout << a+b << endl; return a+b; } |
那么利用perl的system函数,就可以捕获这一退出状态:
1 23 | #!/usr/bin/perl $a=1;$b=3; print system("./add $a $b"); |
也就是说我们可以利用其他程序来为perl做计算,这个是不是有点像dll的味道? :)
但是这里有个缺点,就是程序的退出状态必须是整数。
那么perl是不是就没办法做这件事了呢? 我要说是,很多perl的fans肯定不乐意了,既然perl强大,我们就见识一下它怎么来做这件事吧
我们把那个c++程序改一改:
1 23 | #include <iostream> using namespace std; int main(int argt, char* argv[]){ cout << (int)argv[1][0]; return 0; } |
1 23 | #!/usr/bin/perl $a = "a"; $b = `./add $a`; print $a,":",$b,"n"; |
怎么样,是不是更有dll的味道了?
最后来说一下如果调用的程序里有输入,又该怎么处理呢? 我们再把c++程序改一改
1 23 | #include<iostream> using namespace std; int main(){ //这次直接采用输入流输入参数,不直接接受参数 char a; cout << "input a char:" << endl; //这里有endl非常重要,下面解释 cin >> a; cout << (int)a << endl; return 0; } |
1 23 | #!/usr/bin/perl $cmd = "./add"; open(CMD, "($cmd) |"); while(<CMD>){print;} #一行一行地输出<br />close(CMD);<br /></cmd> |
input a char:
a
97
解释一下为什么第一个endl很重要,因为在输出的时候,无法同时处理输入和输出,所以加换行,让输入单独在一行。
相关文章推荐
- (C#)Windows Shell 外壳编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令
- Perl调用shell命令
- 在perl中执行shell命令
- (C#)Windows Shell 外壳编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令
- Perl 获取shell命令的执行结果
- (C#)Windows Shell 编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令
- (C#)Windows Shell 外壳编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令
- linux shell编程指南第二十四章------shell嵌入命令
- PERL中对SHELL命令的调用细节
- PERL中对SHELL命令的调用细节
- Perl执行shell命令的几种方式及其区别
- Perl调用shell命令方法小结
- Perl中使用shell命令
- Perl调用shell命令方法小结
- Perl调用shell命令方法小结
- Shell中直接调用perl命令
- 关于shell命令中嵌入if判断
- (C#)Windows Shell 编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令
- shell的嵌入命令
- perl远程执行多台服务器shell命令