in reply to Executing series of system commands in a shell(cmd.exe)

"I'm trying to execute series of command(sic)...."

you've given us very little indication of your effort. What did you try?

Or, if your "trying" means you've asked us to write code to satisfy your (incomplete and unclear) specs, you've used an inaccurate description for the wrong question: The Monastery is not a free code-writing service. OTOH, if you want to learn how to code your own solution, consider:

If you get stuck actually writing the code, then come back with your specific problem (and the code, the data, error message(s) (if any), and a description of how what happens deviates from your desires.

Replies are listed 'Best First'.
Re^2: Executing series of system commands in a shell(cmd.exe)
by Anonymous Monk on Aug 16, 2011 at 10:18 UTC
    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]"