Hello All,
I'm new to this forum. Sorry for not providing enough info.
Below is my approach in perl (first I tried this in python). Reading the commands from a file "Build_Cmd_List.txt" (which contains arbitrary commands generated during build.) And then executing each command in common shell(cmd.exe).
I'm unable to get the output of the command which is executed in shell and its execution status.
Please help me how can i get the exit status of the command executed and its output & error messages, also let me know if there any better approach to this problem.
#!/usr/bin/perl
use IPC::Open3;
my($wtr, $rdr, $err);
$pid = open3($wtr, $rdr, $err, 'cmd.exe') or die "$!";
print "PID: $pid\n";
# Read the file containing commands
# open (FHR, "Build_Cmd_List.txt") or die "$!";
# my @commands = <FHR>;
# close(LIST);
my $expected = '<$$$>\r\n';
my $prompt_cmd = 'prompt $L$$$$$$$G$_';
my @commands = ($prompt_cmd, 'set Build_DIR=c:\build_proj1','md %Build
+_DIR%', 'cd %Build_DIR%', 'echo Inside %Build_DIR%','exit');
for my $cmd (@commands) {
$| = 1;
#---------------------------------
# Set of statements to replace tokens(using regex)
#---------------------------------
print "Executing command after token replacement: $cmd\n";
print $wtr "$cmd\r\n";
# Read the output & error message of the command executed
#while(<$rdr>){
# last if m/\Q$expected\E/ ;
# print;
#}
}
My approach in Python is:
import subprocess
# Read the File containing list of commands
fhr = open("sample_file",'r')
# SHELL FOR EXECUTING BUILD COMMANDS
SHELL_CMD = "cmd.exe"
shellproc = subprocess.Popen(SHELL_CMD,shell=True,stdin=subprocess
+.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
expected = '<$$$>\r\n'
prompt_cmd = 'prompt $L$$$$$$$G$_'
shellproc.stdin.write('%s\n' % prompt_cmd)
# Read the file line by line
for line in fhr:
##
## SET of Statements to replace all the tokens
cmd = <## processed line##>
shellproc.stdin.write('%s\n' % cmd)
while True:
output = shellproc.stdout.readline()
if output.endswith(expected): break
logger.info(output)
print "Waiting for subshell to terminate"
shellproc.stdin.write("exit\n")
shellproc.wait()
print "Successfully Executed all the Commands [Done]"
|