准备好一个简单的perl脚本文件
把在windows下使用命令行方式查看系统进程信息输出到一个日志文件中
这里简单编写一个perl脚本文件test.pl,内容如下
#!/usr/bin/perl
#作用:在指定目录下生成日志文件,同时每隔1秒输出一次信息,执行到40次后退出
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time());
$year+=1900;
$mday = ($mday < 10)? "0$mday":$mday;
$mon = ($mon < 9)? "0".($mon+1):($mon+1);
$hour = ($hour < 10)? "0$hour":$hour;
$min = ($min < 10)? "0$min":$min;
$sec = ($sec < 10)? "0$sec":$sec;
open(STDOUT, "> C:\\perltest\\testperl${year}${mon}${mday}_${hour}${min}${sec}.LOG");
if( $#ARGV < 0 ){
print "没有输入参数,请重新输入参数,程序退出\n";
}else{
$i=0;
while (1) {
if($i==40){
last;
}
print "i = $i \n";
sleep(1);
$i++
}
}
exit;
编写java程序调用,同时也输出命令行任务下的进程信息
import java.io.BufferedReader;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class PerlMutilProcessTest {
private static Logger logger = LoggerFactory.getLogger(PerlMutilProcessTest.class);
public static void asyncExecutePerl(String perlFullFileName,String [] perlParameters)throws IOException{
Runtime objRunTime = Runtime.getRuntime();
String[] perlParam = null;
if(perlParameters!=null && perlParameters.length > 0){
perlParam =new String[perlParameters.length+2];
perlParam[0]="perl";
perlParam[1]=perlFullFileName;
for(int i=0;i<perlParameters.length;i++){
perlParam[i+2]=perlParameters[i];
}
}else{
perlParam =new String[2];
perlParam[0]="perl";
perlParam[1]=perlFullFileName;
}
StringBuffer perlCmdStr = new StringBuffer();
for(int j=0;j<perlParam.length;j++){
logger.debug("NO. {} perl argument {}",j, perlParam[j]);
perlCmdStr.append(perlParam[j]).append(" ");
}
logger.debug("start exec");
logger.debug(perlCmdStr.toString());
objRunTime.exec(perlCmdStr.toString());
logger.debug("end exec");
}
public static void syncExecutePerl(String perlFullFileName,String [] perlParameters,String outputInfoFileName,String outputErrorFileName)throws IOException,InterruptedException{
Runtime objRunTime = Runtime.getRuntime();
String[] perlParam = null;
if(perlParameters!=null && perlParameters.length > 0){
perlParam =new String[perlParameters.length+2];
perlParam[0]="perl";
perlParam[1]=perlFullFileName;
for(int i=0;i<perlParameters.length;i++){
perlParam[i+2]=perlParameters[i];
}
}else{
perlParam =new String[2];
perlParam[0]="perl";
perlParam[1]=perlFullFileName;
}
StringBuffer perlCmdStr = new StringBuffer();
for(int j=0;j<perlParam.length;j++){
logger.debug("NO. {} perl argument {}",j, perlParam[j]);
perlCmdStr.append(perlParam[j]).append(" ");
}
logger.debug("start exec");
logger.debug(perlCmdStr.toString());
Process perlProcess = objRunTime.exec(perlCmdStr.toString());
FileOutputStream redirectOutputFile = null;
FileOutputStream errorOutputFile = null;
InputStream errorInputStream = null;
InputStream infoInputStream = null;
try{
errorOutputFile = new FileOutputStream(outputErrorFileName);
redirectOutputFile = new FileOutputStream(outputInfoFileName);
errorInputStream = perlProcess.getErrorStream();
infoInputStream = perlProcess.getInputStream();
ProcessInfo errorPerlProcessInfo = new ProcessInfo(errorInputStream,ProcessInfo.TYPE_ERROR,errorOutputFile);
ProcessInfo outputPerlProcessInfo = new ProcessInfo(infoInputStream,ProcessInfo.TYPE_OUTPUT, redirectOutputFile);
errorPerlProcessInfo.redirect();
outputPerlProcessInfo.redirect();
int exitVal = perlProcess.waitFor();
logger.debug("ExitValue: " + exitVal);
errorOutputFile.flush();
redirectOutputFile.flush();
}catch(IOException ioe){
if(redirectOutputFile!=null){
redirectOutputFile.close();
}
if(errorOutputFile!=null){
errorOutputFile.close();
}
if(errorInputStream!=null){
errorInputStream.close();
}
if(infoInputStream!=null){
infoInputStream.close();
}
throw ioe;
}catch(InterruptedException ie){
if(redirectOutputFile!=null){
redirectOutputFile.close();
}
if(errorOutputFile!=null){
errorOutputFile.close();
}
if(errorInputStream!=null){
errorInputStream.close();
}
if(infoInputStream!=null){
infoInputStream.close();
}
throw ie;
}finally{
if(redirectOutputFile!=null){
redirectOutputFile.close();
}
if(errorOutputFile!=null){
errorOutputFile.close();
}
if(errorInputStream!=null){
errorInputStream.close();
}
if(infoInputStream!=null){
infoInputStream.close();
}
}
logger.debug("end exec");
}
public static void syncExecuteSyscmd(String[] syscmdParameters,String outputInfoFileName)throws IOException,InterruptedException{
if(syscmdParameters==null||syscmdParameters.length==0){
return;
}
StringBuffer syscmdStr = new StringBuffer();
for(int j=0;j<syscmdParameters.length;j++){
logger.debug("NO. {} syscmd argument {}",j, syscmdParameters[j]);
syscmdStr.append(syscmdParameters[j]).append(" ");
}
logger.debug("start exec");
logger.debug(syscmdStr.toString());
Process syscmdProcess = Runtime.getRuntime().exec(syscmdStr.toString());
FileOutputStream redirectOutputFile = null;
InputStream infoInputStream = null;
try{
infoInputStream = syscmdProcess.getInputStream();
redirectOutputFile = new FileOutputStream(outputInfoFileName);
int bufferLen = 10*1024;
byte[] byteBuffer = new byte[bufferLen];
int readLen = infoInputStream.read(byteBuffer);
while (readLen != -1) {
if(readLen==bufferLen){
redirectOutputFile.write(byteBuffer);
}else{
redirectOutputFile.write(byteBuffer,0,readLen);
}
readLen = infoInputStream.read(byteBuffer);
}
}catch(IOException ioe){
if(redirectOutputFile!=null){
redirectOutputFile.close();
}
if(infoInputStream!=null){
infoInputStream.close();
}
throw ioe;
}finally{
if(redirectOutputFile!=null){
redirectOutputFile.close();
}
if(infoInputStream!=null){
infoInputStream.close();
}
}
logger.debug("end exec");
}
public static void main(String[] args){
try{
DateFormat yyyyMMDDhhmmss = new SimpleDateFormat("yyyyMMdd_HHmmSSS");
//PerlMutilProcessTest.asyncExecutePerl("C:\\perltest\\test.pl", null);
//PerlMutilProcessTest.syncExecutePerl("C:\\perltest\\test.pl",null,"C:\\perltest\\perlresult"+yyyyMMDDhhmmss.format(new Date())+".txt","C:\\perltest\\perlerror"+yyyyMMDDhhmmss.format(new Date())+".txt");
//PerlMutilProcessTest.asyncExecutePerl("C:\\perltest\\test.pl", new String[]{"123"});
//PerlMutilProcessTest.syncExecutePerl("C:\\perltest\\test.pl",new String[]{"123"},"C:\\perltest\\perlresult"+yyyyMMDDhhmmss.format(new Date())+".txt","C:\\perltest\\perlerror"+yyyyMMDDhhmmss.format(new Date())+".txt");
PerlMutilProcessTest.syncExecuteSyscmd(new String[]{"cmd","/c","tasklist","/v"}, "C:\\perltest\\syscmdresult"+yyyyMMDDhhmmss.format(new Date())+".txt");
}catch(Exception e){
e.printStackTrace();
}
}
}
class ProcessInfo{
private static Logger logger = LoggerFactory.getLogger(ProcessInfo.class);
public static String TYPE_ERROR = "ERROR";
public static String TYPE_OUTPUT = "OUTPUT";
private InputStream is;
private String type;
private OutputStream os;
public ProcessInfo(InputStream is, String type, OutputStream redirect){
this.is = is;
this.type = type;
this.os = redirect;
}
public void redirect(){
PrintWriter pWriter = null;
InputStreamReader isReader = null;
BufferedReader bReader = null;
try{
if (os != null && ProcessInfo.TYPE_OUTPUT.equals(this.type)){
pWriter = new PrintWriter(os);
}
isReader = new InputStreamReader(is);
bReader = new BufferedReader(isReader);
String line = null;
while ( (line = bReader.readLine()) != null){
if (pWriter != null){
pWriter.println(line);
}
}
if (pWriter != null)
pWriter.flush();
} catch (IOException ioe){
try{
if(isReader!=null){
isReader.close();
}
if(bReader!=null){
bReader.close();
}
if(pWriter!=null){
pWriter.close();
}
}catch (IOException tryioe){
logger.error("输出流出现错误,关闭流时出现异常...", tryioe);
}
logger.error("输出流出现错误...", ioe);
}
}
}
分享到:
相关推荐
C调用perl的说明,如果有问题,请联系javc@163.com
此代码教程主要包含两部分,1、java调用perl脚本生成excel;2、将生成的数据文件进行压缩,并解决了压缩后的文件解压时的乱码问题。 代码已经过系统测试,没任何问题。
1.1.4 在Macintosh系统上安装Perl 7 1.2 文档资料 7 1.2.1 某些特殊的文档资料举例 8 1.2.2 如果无法找到文档该怎么办 9 1.3 编写你的第一个Perl程序 9 1.3.1 键入程序 9 1.3.2 运行程序 9 1.3.3 程序正确将...
Perl2Py:我写了一对简短的脚本,这些脚本使用'subprocess'从Python内部调用perl脚本。 接受可选的输入参数,然后通过管道传输STDIN和STDOUT来运行perl脚本。 数据从perl转换为JSON,然后从JSON转换为python
jmap-perl 是 JMAP 代理服务器的 Perl 实现,Perl JMAP 后端可以与 IMAP 和 SMTP 服务器通许,允许在邮件系统上替换 JMAP 接口。为了高效,初始化实现要求所有服务器支持 CONDSTORE 扩展(RFC4551/FRC7162)。提供一个...
第2章 Perl脚本 2.1 从命令行使用Perl 2.1.1 七开关 2.1.2 -n开关 2.1.3 -c开关 2.2 脚本设置 2.3 脚本 2.3.1 开始 2.3.2 注释 2.3.3 Perl语句 2.3.4 执行脚本 2.3.5 脚本范例(UNIX, ...
perl-support:在VimgVim中编辑Perl脚本。 插入代码段,运行,检查和分析代码并查找帮助
perl-pp-autolink:查找Perl脚本的相关动态库,并将它们添加到PAR :: Packer pp调用中
go 从Go运行Perl代码 实际上,为了更精确一点,此程序包从Perl中提取值到Go中。...之后,我们可以使用以下命令获取简单的值,例如字符串: // extract a SHA hash from Perl var sum string p.Eval(`Diges
shell脚本 复制粘贴执行即可自动化安装apache 软件包介绍:apr :Apache可移植运行库,给apache模块中添加组件和...pcre :是perl运行库,perl语言调用pcre库中的脚本 pcre-devel:perl运行环境,支持perl语句运行。
提供了MAODV组播协议的源代码,以及场景测试TCL脚本和perl编写的吞吐量分析代码。
在Perl 脚本中使用eval 命令来强制变量替换 11-15. 使用set 来改变脚本的位置参数 11-16. 重新分配位置参数 11-17. Unset 一个变量 11-18. 使用export 命令传递一个变量到一个内嵌awk 的脚本中 11-19. 使用getopts ...
为了理解这些函数的作用,在展示函数的范例程序之前,提供了这些函数的背景信息,以避免查阅手册和其它书籍。 本书还有包含了完整函数定义、命令行开关、特殊变量、常见模块和Perl调试器列表的附录;同时,还有一个...
内容色彩缤纷的包装脚本和替代方法 (用于Color du )是一个perl脚本,它调用du并显示带有可选颜色的漂亮直方图,从而可以立即查看占用磁盘空间的目录。 另一个着色器(用python编写),用于美化您的日志文件或命令...
数码信标一个Perl脚本,它使用Predict和Hamlib自动调整多普勒广播电台。 还使用信标实用程序发送APRS信标。 digisats-beacon.pl需要安装predict和hamlib。 在运行digisats-beacon.pl之前,您应该运行一个预测服务器...
在Perl脚本中使用eval命令来强制变量替换 11-15. 使用set来改变脚本的位置参数 11-16. 重新分配位置参数 11-17. Unset一个变量 11-18. 使用export命令传递一个变量到一个内嵌awk的脚本中 11-19. 使用getopts命令来...
您是否为从命令行调用 Perl 单行程序的日子感到难过? 享受使用 Lua 语言从命令行处理文本文件的快速单行程序的好处。 Lua Commander 是 LuaJIT 的替代前端,可让您快速完成工作。 特征 一些功能: 使用 LuaJIT ...
该函数库实现了基本的解释器,它有一套实现变量、流程控制和过程的核心脚本命令,而且还有一组用来存取操作系统服务以运行其他程序、存取文件系统和使用网络套接字的命令。Tcl和Tk提供了一台可以在UNIX、Windows和...
【项目简介】 QT开发的调用打印机打印图片的程序...Qt 还存在 Python、Ruby、Perl 等脚本语言的绑定, 也就是说可以使用脚本语言开发基于 Qt 的程序。开源社区就是这样,好东西就会被派生扩展,到处使用, 越来越壮大。