Running a "heavy" program from within a java class

Dear Java programmers,
I 'm trying to run a software called surflex from within a java class, using the following java command:
Runtime.getRuntime().exec( new String[ { "/bin/bash", "docking_script_2.bash"} );
For convenience I've created the following simple bash script but for some strange reason surflex is not executed:
#!/bin/bash
surflex-dock-v211-linux.exe proto drug.mol2 receptor_hydro.mol2 p1;
surflex-dock-v211-linux.exe dock drug.mol2 p1-protomol.mol2 receptor_hydro.mol2 >& 1OHR_A_output.txt;
Can anybody help me on that (ignore the arguments, they are correctly set)? I'll try to find another, more generic example, but so far I've noticed that the same thing happens with unix grep command.
thanks,
Tom

I think if you want to invoke a bash shell and give it a command to execute, you need to do
/bin/bash -c commandrather than
/bin/bash commandAccordingly, your call to exec should look like
exec( new String[ { "/bin/bash", "-c" "docking_script_2.bash"} );Beyond, that, I'd suggest the following as general debugging tips and best practices:
* As the first line of the bash script, include a line that does something simple, like touch a file, so you can see if the script is executing at all.
* In Java, call Process.waitFor(). Its return value is the process' exit value.
* Make sure you're gobbling stdout and stderr from the process, and giving stdin any input it needs. You'll have to do this for the process to run correctly, and you can also use what you read from stdout and stderr to debug the execution of the process. [http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html]
* You may wan to look into ProcessBuilder, rather than Runtime.exec. I haven't used it myself yet, but apparently it's supposed to be the preferred way to execute external processes.

Similar Messages

  • How to execute a Perl program from within a Java prog

    How do I execute a Perl program from within a Java program.
    Lets say the Perl program that I want to execute is 'abc'. Now, 'abc' requires some input that I want to give it from within the Java program. How do I do it?
    And finally, how do I execute that Perl program from within the Java program.
    If I execute the Perl program alone then I do it in the following way -
    perl abc inp1 inp2 inp3
    where inp1, inp2, inp3 are inputs to the Perl program. I will not be able to change or modify the coding of the Perl program - 'abc' as I do not have access to its code. Its a kind of an application whose usual method of execution is in the above shown way. So, how do I execute 'abc' from within a Java program.

    what part of don't crosspost, don't you understand?
    http://forum.java.sun.com/thread.jsp?forum=4&thread=427193

  • Executing a Perl program from within a Java prog

    How do I execute a Perl program from within a Java program.
    Lets say that the Perl program that I want to execute is 'abc'.'abc' requires some input that I want to give from within the java program. How do I do that? Then I want to execute the Perl program from within the Java prog. How do I do it?

    don't crosspost.
    http://forum.java.sun.com/thread.jsp?forum=31&thread=427211&tstart=0&trange=100

  • Executing a Java Program from within a Java Program

    I need to execute the following Java Program from withing another Java Program. The office toolbar command line is
    D:\WINDOWS\system32\java.exe -cp E:\Development\Eclipse\UpdateServer\Classes -server -showversion UpdateServer
    I can find no combination of ProcessBuilder commands, including those that include "Cmd.exe /c" that will make this program run from within another Java Program. All the examples I can find only show how to run Windows *.exe programs. I keep getting error 123 from ProcessBuilder.start(), but I can find no documentation for error 123.

    Assuming your code didn't get mangled by the forum
    (it's missing one "), it may be that your "-cp
    E:\\Develop.." argument is getting quoted as it has a
    space in it; try passing "-cp" and "E:\\Develop..."
    as two arguments.That worked; specifically the following tested OK:
    ProcessBuilder pb = new ProcessBuilder("D:\\WINDOWS\\System32\\Java.exe", "-cp", "E:\\Development\\Eclipse\\UpdateServer\\Classes\\", "-server", "-showversion", "UpdateServer" );
    pb.directory(new File("E:\\Development\\Eclipse\\UpdateServer\\Classes\\"));
    try{
         Process p = pb.start();
         InputStream is = p.getErrorStream();
         InputStreamReader isr = new InputStreamReader(is);
         BufferedReader br = new BufferedReader(isr);
         String line;
         while ((line = br.readLine()) != null)
              System.out.println(line);
         p.waitFor();
    }catch(IOException ioe){
    I was sure I tried that exact same code before, and it did not work, but now it does, at least at the top level (when it is in main of a test program). I will have to wait to try it until later when it is buried deep in a subroutine.

  • How to run java programs from a master java program?

    Hello,
    I have several java programs which run from the command prompt. I am seeking help with code for starting java programs from within a java program. For example, a program called master.java works something like this:
    import java.*;
    create connection pool
    create variables and result sets
    start/run slave1.java (var1, var2);
    start/run slave2.java (var3, var4, var5);
    start/run slave3.java (var1, var4);
    end of program master.java
    Each of the slave.java programs will run for up to an hour. I do not want the master.java program to pause for each slave program to stop. Instead, the master program will keep running and multiple slave programs will be running simultaneously with the master program. When a slave program starts, it is on its own. Also, if possible, I would like to have each of these slave.java programs open in a new separate command window, so I can observe each slave program running in separate windows.
    Any suggestions for code or helpful documentation are greatly appreciated.
    Thank you,
    Logan

    Thank you all.
    At the bottom of master.java I have successfully started a batch file with these lines:
    String jcmd = "cmd.exe /c start c:/data/simulations/MsgViewCount2.bat";
    Process proc = Runtime.getRuntime().exec(jcmd);
    But I still cannot get a java program to start. Here is one variation I have tried:
    String [] cmdArray = new String[2];
    cmdArray[0] = "java";
    cmdArray[1] = "slave1";
    Runtime runtime = Runtime.getRuntime();
    Process process = runtime.exec(cmdArray);
    This compiles, and no errors occur, but nothing happens.
    Regarding this comment:
    Why Runtime.exec? Either make the slaves Runnable or
    just call their main() methods.
    Oh, I see. Sepearate output. :PNone of the slave.java programs have any output.
    Thanks again.

  • Executing C program from with a java program

    How do you call a c program from within a java program, and parse arguments into that program and return something.
    Cheers for any reply...

    Read http://www.javaworld.com/jw-12-2000/jw-1229-traps.html

  • Start a WS application from within a java program

    Hi,
    I need to start a WebStart application from within a java program. Therefore I develeoped a class which starts javaws.exe within its main-method like this:
    try {
    Runtime.getRuntime().exec(
    "c:\\java web start\\javaws.exe http://a.b/c.jnlp"
    } catch (Exception e) {
    e.printStackTrace();
    And that did not work. Java Web Start tries to start the .jnlp program but returns with the message, that the app-desc|applet-desc|installer-desc|component-desc is missing. But it is there: It is an applet and thus I defined an applet-dec.
    I tried to do it from a command line with the followinf command:
    java -Djnlpx.home="C:\abc" -cp "C:\abc\javaws.jar" com.sun.javaws.Main http://a.b/c.jnlp
    And that works. But using this command from within my jjava prog using the Runtime.exec() method does not work.
    By the way, simply type "javaws http://a.b/c.jnlp" at the command line does not work.
    Can anybody help me? How may I start a .jnlp program within another java program.
    Kind Regards,
    Tobias Neubert

    Hi,
    I recently had a quite similar problem. At least the error message by the Java Web Start application on Mac OS X complained about the same error (app-desc|applet-desc|installer-desc|component-desc). It turned out to be some bad invisible characters in the jnlp file. I copied some sample from a web page which for some reason contained some unicode chars that the parser doesn't like. Use a different text editor or the less command on unix to see if there are some strange characters in you jnlp file.
    But it seems strange that it does work from the command line and not from your code.
    -Stefan

  • How to call up an executable file (eg. MSPaint) from within my java program

    How to call up an executable file (eg. MSPaint) from within my java program

    Ummm... why would you want to get MSPaint anyway? Even in the absense of real software, Java's own graphics tools are way more sophisticated - with a little time and effort, you could write a simple paint package that beat MSPaint hands down.

  • How can I run an external program from a PLSQL procedure?

    Is there a package to run an external program from PLSQL? or is there another way to do that?
    thanks.

    here there is an example about how a PL/SQL procedure can
    work with an external C program.
    http://download-east.oracle.com/docs/cd/A87860_01/doc/appdev.817/a76936/dbms_pi2.htm#1003384
    Apart from that you have Java Stored Procedures option
    to carry out your task.
    Java Stored Procedures Developer's Guide Contents / Search / Index / PDF
    http://download-east.oracle.com/docs/cd/B10501_01/java.920/a96659.pdf
    Joel P�rez

  • How to call Operating System commands / external programs from within APEX

    Hi,
    Can someone please suggest how to call Operating Systems commands / external programs from within APEX?
    E.g. say I need to run a SQL script on a particular database. SQL script, database name, userid & password everything is available in a table in Oracle. I want to build a utility in APEX where by when I click a button APEX should run the following
    c:\oracle\bin\sqlplusw.exe userud/password@database @script_name.sql
    Any pointers will be greatly appreciated.
    Thanks & Regards,

    Hi Guys,
    I have reviewed the option of using scheduler and javascript and they do satisfy my requirements PARTIALLY. Any calls to operating system commands through these features will be made on the server where APEX is installed.
    However, here what I am looking at is to call operating systems programs on client machine. For example in my APEX application I have constructed the following strings of commands that needs to be run to execute a change request.
    sqlplusw.exe user/password@database @script1.sql
    sqlplusw.exe user/password@database @script2.sql
    sqlplusw.exe user/password@database @script3.sql
    sqlplusw.exe user/password@database @script4.sql
    What I want is to have a button/link on the APEX screen along with these lines so that when I click that link/button this entire line of command gets executed in the same way it would get executed if I copy and paste this command in the command window of windows.
    Believe me, if I am able to achieve what I intend to do, it is going to save a lot of our DBAs time and effort.
    Any help will be greatly appreciated.
    Thanks & Regards,

  • Run Child Concurrent Program from Main Concurrent Program

    Hi,
    I'm trying to run Child Concurrent Program from the Main Concurrent Program as below, could you suggest me on below.
    Database:10g
    Main_Concurrent_Program
    =================
    1) Will update staging table XXID_PO_ITM with Batch_id = 1,2,3,4,5
    This staging table has 1000 rows, so every 200 rows will be updated with one of the above batch_id
    This logic is working.
    Child_Concurrent_Program
    ================
    2) Above Main Concurrent Program should call below Child_Concurrent_Program.
    This Child_Concurrent_Program will have parameter batch_id (based on above batch_id)
    So, this Child_Concurrent_Program should kick off with batch_id = 1
    Simillarly, Child_Concurrent_Program should kick off with batch_id = 2
    Child_Concurrent_Program should kick off with batch_id = 3
    Child_Concurrent_Program should kick off with batch_id = 4
    Child_Concurrent_Program should kick off with batch_id = 5
    Could you give me some suggestions on this?
    Thanks.

    Check with FND_SUBMIT for submitting a concurrent job using child dependecies. Keep in mind, that once you call the API ... it spawns it's own thread and and becomes an autonomous process. Control is no longer maintained within the calling package.
    procedure submit_interface_data(p_schedule_date in date,p_mm_header_id in number,p_req_id out number)
    is
      v_user_id            number;
      v_application_id     number;
      v_responsibility_id  number;
    begin
                select user_id
                into   v_user_id
                from   fnd_user
                where  user_name = 'USER123';
                select application_id,
                       responsibility_id
                into   v_application_id,
                       v_responsibility_id
                from   fnd_responsibility_tl
                where  responsibility_name = 'General Warehouse';
      fnd_global.apps_initialize(v_user_id,v_responsibility_id,v_application_id);
      p_req_id := fnd_request.submit_request ( application => 'XYZ',
                           program     => 'MOVE_CONC_SHORT_NAME',
                           description => null,
                           start_time  => p_schedule_date,
                           sub_request => false,
                     argument1   => p_mm_header_id);
      commit;
    exception
    when others
       then
         spl_log_pub.write_exception(transaction_id   => null,
                                     transaction_type => null,
                                     error_message    => '<some error message>' ||
                                     'sqlcode: ' || sqlcode ||
                                     'sqlerrm: ' || sqlerrm);
    end submit_interface_data;Edited by: sreese on May 18, 2012 3:16 PM

  • How to run a Concurrent Program from the back end?

    Hi,
    How to run a Concurrent Program from the back end?
    Is it Possible to see that Concuurent Request id which we run from the back end, in the front end?
    If yes, then Please Give reply how to write the code
    Thanks in Advance,
    Bharathi.S

    This is documented in Chapter 20 of the Application Developers Guide http://download.oracle.com/docs/cd/B53825_03/current/acrobat/121devg.pdf. These MOS Docs also have some information available
    221542.1 - Sample Code for FND_SUBMIT and FND_REQUEST API's
    235359.1 - How to Launch Planning Data Pull MSCPDP using FND_REQUEST.SUBMIT_REQUEST
    HTH
    Srini

  • Possible to create a JAR file from within a java app?

    Is it possible to create a jar file from within a java application?
    Can it be done more elegantly than by spawning-off another
    process with the Runtime and exec() portions of the api?
    Thanks
    Scott

    Thanks! I was mislead by the API notes for java.util.jar:
    The JarOutputStream class is used to write the contents
    of a JAR file to any output stream.
    I was looking for a class or method to make jar files.
    Seems this is it ;)
    Thanks
    Scott

  • Running an External Program from Batch on Windows Server 2008R2 Failing

    Hi,
    I am trying to run an external program from a batch job and it is failing with this error message:
    Ext. prog.: ERROR: Input redirection is not supported, exiting the process immediately.
    Ext. prog.: External program terminated with exit code 1
    The program I am trying to run is:  timeout
    This command works on the OS: timeout -t 30
    I have setup the step to look like this:
    Under External Program:
    -Name: timeout
    -Parameter: -t 30
    I have also tried:
    -Name: timeout -t -30
    -Parameter:
    I am running ECC 6.04 on top of Windows Server 2008R2 with SQL Server 2008R2. 
    When we were running in Server 2003 on ECC 6.0 I was able to use the Sleep program just fine in the same manner.  I have found out that sleep is not available in server 2008.  It was replaced with timeout.
    After an update to EHP4 and moving to Windows Server 2008R2, Is there any pre-work that needs to be done on the SAP or Windows side before we can run external programs?
    Thank you,
    Neil

    > SAPService<SID> and <SID>ADM both have Administrator rights for the server.
    > That means they should have full access.
    No - this is no more true like that since Windows 2008, it's a bit more complex:
    http://en.wikipedia.org/wiki/User_Account_Control
    > Where would you setup the permission/policy to "interact with the desktop"?
    Add the policy using group policy editor (gpedit.msc)
    Markus

  • Problem running a concurrent program from Reports

    Hi,
    I've come across a problem while running a concurrent program from Reports. The report is executed OK and at the end, I call a concurrent program by firing fnd_request.submit_request. I catch then the req_id returned and it gives me 0. I tried to replace the concurrent program, which is a UNIX shell script, with just a simple script that echos "hello", but anyway, I get 0 as return value from fnd_request.submit_request.
    The next step I tried to set apps_initialize with proper vUSER_ID, vRESP_ID and vRESP_APPL_ID, but did not get away with that. My last try was to hardcode vUSER_ID to a sysadmin user, in case this was rights-related issue but did not work as well.
    Am now looking into a possibility of actually getting the error, why it failes. I found some posts where FND_MESSAGE.RETRIEVE and FND_MESSAGE are used but this apparently does not work under Reports (am using reports builder v. 9.2.0.4.0).
    Any suggestions how to solve this issue?
    Thanks,
    David Lacina.

    Hi,
    Make sure that the concurrent program you are calling exists (case sensitive) and is enabled.
    Create a PL/SQL package and use that to call your request - the you'll be able to use fnd_message.
    Regards,
    Gareth
    Blog: http://garethroberts.blogspot.com/

Maybe you are looking for

  • Change font size of an table with javascript

    Hello! i am new to developing in javascript as well as to indesign. i have to make a few changes to an existing script. in a user dialouge i get the font size in which the imported table should be. but how can i change the font size of an table??? pl

  • Error saving or opening pdf in mail

    I've been using Apple Mail successfully for the last 3 years. Since yesterday I have not been able to download or open any pdfs attachments. Any suggestions on how to resolve this issue. Thank you, Meryl

  • Black and white pictures and raw format

    I started to use raw format. however, when i shoot pictures in black and white and download them to bridge, they get converted to color pioctures. Does anybody know why and what to do about this?

  • Java applet wont load

    There is a website on our intranet that has a window in it that is written in java. The applet loads without conflict in Windows NT, but will not load in XP. I have loaded every Java Plug-in from 1.1.1 - 1.4.1_02. I need this applet to load in XP????

  • Teradata and SAP BI7.3 Connection

    Hi experts, I have requirement to extract data from Teradata to SAP BI7.3, I have gone through some of the links in SDN which was suggest to go for UD connection with JDBC 1.In SAP BI7.3 is there any other way of connecting Teradata ( As all links re