Im running a selenium TestNG script using ANT in eclipse. The execution completes but the cmd prompt stays there even after the execution when i try to run the bat file from java. But when i run the bat file by double clicking it, the cmd exit after execution. Here below are the code to invoke the bat file and content of bat file:
Runtime.getRuntime()
.exec("cmd /c start run.bat", null, new File("C:\\Users\\nvithushan\\Desktop\\HSBC\\gen\\seleniumwebdriver\\HSBC_Demo"));
This is the content of the batch file.
#echo off
echo exectution starting
start ant
exit
Any help
It should be sufficient in your exec to do cmd /c run.bat and in your batch file just do ant.bat or call ant.bat. By definition the start command starts a separate cmd process. Note also the documentation:
If [the command you run] is an internal cmd command or a batch file
then the command processor is run with the /K switch to cmd.exe. This
means that the window will remain after the command has been run.
Related
when I'm executing shell script through java Runtime.exec(), where do I find nohup.out file.
String command = "nohup ksh /home/xyz/script.ksh &";
Runtime rtime=Runtime.getRuntime();
rtime.exec(command);
nohup only writes the output to a file if it's connected to a terminal. This won't be the case when you invoke it through exec, so the output will be written to the sub-process's stdout (which you can get through getInputStream). No nohup.out will be created anywhere.
I want to call ant from a batch file.
#echo off
cmd.exe /k cd /d E:\work\CRM
call ant
It's not working. Nothing is happening; neither showing any error nor nothing... How do I call ant?
I need to execute ant compile command from batch file from the current location E:\work\CRM.
Also I set the environment variables for ant:
ANT_HOME
JAVA_HOME
Get rid of cmd.exe /k since you're already in a batch file context
Add -d after ant to show debugging info
Problem Statement: I just want to start the HUB and Node to perform some tests using Selenium Grid.
I have two Batch files START HUB.bat and START NODE.bat which run perfectly when i manually run them.
But i want them to run using a Java Program #BeforeMethod.
I looked for answers
Runtime.getRuntime().exec("cmd /C start \"./BatchFiles/START HUB.bat\"");
This Opens Up the CMD but goes to the path of my .git project but doesnt run the bat file.
I tried using Process Builder but that doesn't open the cmd.
ProcessBuilder pb = new ProcessBuilder("cmd", "/C"," start", "START HUB.bat");
File dir = new File("D:\\work\\GIT REPOSITORY\\project.selenium.maven.jenkinsCI\\BatchFiles");
pb.directory(dir);
Process p = pb.start();
Can someone please help me with this issue. Below are the commands in the batch file.
D:
cd work
java -jar selenium-server-standalone-3.4.0.jar -role hub
So you want to execute the command line:
cmd /C start "./BatchFiles/START HUB.bat"
With cmd at beginning of the command line a new command process is already started with executing %SystemRoot%\System32\cmd.exe. This command process should automatically close after running the command as explicitly requested with option /C which means close as it can be read on running in a command prompt window cmd /?.
The command to execute in this command process is:
start "./BatchFiles/START HUB.bat"
The internal command start of cmd.exe is for starting an executable or script in a new process. Its help can be read on running in a command prompt window start /?.
The first double quoted string is interpreted by start as title of the new command process window opened when a batch file or a console application should be executed in a new command process.
And this is the reason why the batch file is not executed because "./BatchFiles/START HUB.bat" is interpreted as window title string.
And on Windows the directory separator is \ and not / as on Unix. / is used as begin of an option as you can see on /C. But Windows handles also file paths with / often correct because of replacing each / internally by \ in directory/file names with an absolute or relative path on accessing the directory or file.
So the solution is using either
Runtime.getRuntime().exec("cmd.exe /C start \"start hub\" \".\\BatchFiles\\START HUB.bat\"");
or using
Runtime.getRuntime().exec("cmd.exe /C \"BatchFiles\\START HUB.bat\"");
A path starting with a directory or file name is relative to current directory of the running process on Windows like using .\ at begin of a directory or file name string.
The first code starts a command process which executes the command start which starts one more command process with title start hub executing the batch file. The first command process started with cmd.exe immediately terminates after running start while the batch file is executed in second started command process. This means your Java application continues while the batch file is executed parallel.
The second code results in executing the batch file in the single command process started with cmd.exe and halting the execution of the Java application until entire batch file execution finished.
The usage of a batch file can be removed here by using:
Runtime.getRuntime().exec("cmd.exe /C start \"start hub\" /D D:\\work java.exe -jar selenium-server-standalone-3.4.0.jar -role hub");
With /D D:\work the working directory is defined for the command process started for executing java.exe with its parameters.
Alternatively without using start command:
Runtime.getRuntime().exec("cmd.exe /C cd /D D:\\work && java.exe -jar selenium-server-standalone-3.4.0.jar -role hub");
Run in a command prompt window cd /? for help on cd /D D:\work and see Single line with multiple commands using Windows batch file for an explanation of operator && used here to specify two commands to execute on one line whereby java.exe is executed only if cd could successfully change the working directory to D:\work.
class RunFile
{
public static void main(String[] arg){
Runtime runtime = null;
try{
runtime.getRuntime.exec("cmd /C start \"D:\\work\\GIT REPOSITORY\\project.selenium.maven.jenkinsCI\\BatchFilesmyBatchFile.bat\\START HUB.bat\"");
}
catch(RuntimeException e){
e.printStackTrace();
}
}
}
Did you try to pass the absolute path to the exec function?
As well as quote the path since you're having a whitespace between START and HUB
The explanation by #Mofi really helped here understanding as to how cmd treats each and every "/".
Runtime.getRuntime().exec("cmd.exe /C start \"start hub\" \".\\BatchFiles\\START HUB.bat\"");
Above is the solution that worked for me.
I want t start a jar which should provide a Rest-WebService.
When I run following command from terminal the jar and the webservice starts successfully:
java -jar SchnittprofilService-1.0-fat.jar BH121 8888
If I run the same command in a shell script start.sh, the jar starts but the not the webservice.
The permission for start.sh is set to 777.
Any suggestions?
Oops:
You have to put your arguments in quotation marks:
java -jar SchnittprofilService-1.0-fat.jar "BH121" "8888"
I am running this command with apache commons exec
C:\\Windows\\System32\\cmd.exe /C start ".\\test" /D ".\\test1" .\\test1\\ldecod.exe -p InputFile=\"test.h264\" -p OutputFile="test.yuv"
the command runs normally through command prompt i.e. starts ldecod.exe and decodes test.h264, but when running the same command through apache commons exec it just opens the folder "test1"
What's going on here?
edit: using the following code
String cmd = "C:\\Windows\\System32\\cmd.exe /C start \".\\test\" /D \".\\test1\" .\\test1\\ldecod.exe -p InputFile=\"test.h264\" -p OutputFile=\"test.yuv\"";
CommandLine commandline = CommandLine.parse(cmd);
DefaultExecutor exec = new DefaultExecutor();
exec.execute(commandline);
You need to add the /b argument to the windows start command. This will run the your command without starting a new command prompt.
From the docs:
/b - Starts an application without opening a new Command Prompt window. CTRL+C handling is ignored unless the application enables CTRL+C processing. Use CTRL+BREAK to interrupt the application.
The way you are running it, start is spawning a new process. I suspsect that ldecod.exe is running but the start command (and your program) does not terminate till you close the command prompt.