Perl open
Perl 的open()
函数有个挺好玩的用法,就是拿来做进程间通信(IPC)。用法上不复杂,像打开文件一样,就能和其他程序传数据,输入输出都能整。你只要在文件名参数里加个|
,马上就能把输出重定向给别的命令,像lpr
打印那种就合适。
重定向输出的时候,用open(HANDLE, "| some_command")
来启动子进程,用print
把数据丢过去,close
收尾。中间记得加点错误,比如die
加上$!
报错信息。写程序防出错,还是得多留心。
再厉害点的玩法,是把别人的输出接过来。用open(HANDLE, "some_command |")
可以读入命令结果,像抓netstat
输出,一行行筛掉你不想看的。这样就能写出那种轻巧的系统工具脚本,效率也不错。
还有一点赞,Perl 支持动态拼命令字符串传给open()
,意思就是你可以组合多个文件或命令来当数据源,比如"cmd1|"
、"-f2 cmd2|"
这种。这种方式多个输入来源时挺灵活的,搞点数据合并啥的实用。
,别忘了几个细节:管道断了要抓SIGPIPE
,不然程序会突然挂掉;还有,命令写错的话,open()
也看起来成功,其实根本没跑通,得靠close
那一步或者检查$?
才知道出问题。
如果你写 Perl 脚本比较多,尤其是要和系统命令打交道,这招真的蛮管用的。简单、灵活,还能省不少折腾子进程的代码。
108.31KB
文件大小:
评论区