Pass a String array to the exec function instead of one string.  The first
element of the array is the executable, the rest are the parameters.  For
example:

      Runtime.getRuntime().exec(new String[] {
            "/usr/bin/blast/blastall",
            "-p", "blastn",
            "-d", "nt human mouse",
            "-i", "/home/me/in.fasta",
            "-o", "/home/me/out.txt"
      });

This way, java handles sending the parameter with spaces correctly.

-Patrick McConnell
Duke Binformatics Shared Resource
Duke University
[EMAIL PROTECTED]


                                                                                       
                                                         
                      Laurence Hummel                                                  
                                                         
                      <[EMAIL PROTECTED]>              To:       [EMAIL PROTECTED]     
                                                    
                      Sent by:                          cc:                            
                                                         
                      [EMAIL PROTECTED]        Subject:  [Biojava-l] Run blast on 
multiple databases                                   
                      pen-bio.org                                                      
                                                         
                                                                                       
                                                         
                                                                                       
                                                         
                      02/03/2004 01:09 PM                                              
                                                         
                                                                                       
                                                         
                                                                                       
                                                         




Hi,
I want to run blastall on several databases, so I run it with -d
"dbName1 dbName2"...
This work well if I launch the command line in a terminal, but not if I
launch it from my java program...
It seems like the "" are not reconized.
Here is what I've done :

         Process blastRun;
         String pOption, dOption, oOption, iOption, eOption, tOption,
blastCommandLine, line;
         BufferedReader errorBuff;
         File outFile;

         try {
             pOption = " -p " + program;
             tOption = " -T"; // out file in html format
             dOption = " -d \"" + db + "\"";
             iOption = " -i " + query;
             eOption = " -e " + eValue;
             oOption = " -o " + outFilePath;

             blastCommandLine = exePath + pOption + dOption + tOption +
iOption + eOption + oOption;

             System.out.println("\nblastcommandLine = " +
blastCommandLine);

             // Call external blastall programm
             blastRun = Runtime.getRuntime().exec(blastCommandLine);

             // Catch blast error
             System.out.println("\nErrorStream = " +
blastRun.getErrorStream().read());
             errorBuff = new BufferedReader(new
InputStreamReader(blastRun.getErrorStream()));
             System.out.println("\nerrorBuff = ");
             while ((line = errorBuff.readLine()) != null) {
                 System.out.println(line);
             }
             System.out.println("\nOutputStream = " +
blastRun.getOutputStream());

         } catch (IOException ex) {
             System.out.println("BLAST NOT RUN");
             System.out.println("IOException : " + ex.toString());

         }


And here is the error :

blastcommandLine = /Applications/blast/blastall  -p blastp -d "db1 db2"
-T -i query.faa -e 10.0 -o /out.html

ErrorStream = 91

errorBuff =
blastall] ERROR: Arguments must start with '-' (the offending argument
#5 was: db2"')

OutputStream = [EMAIL PROTECTED]

The exactly same command line copy/pasted in a terminal works very
well...

Is someone has an idea?

Laurence


--
Laurence HUMMEL
Génopole - Plate-Forme 4 "Intégration et Analyse Génomiques"
Institut Pasteur
28 rue du docteur Roux - 75015 PARIS
Tel : 01.44.38.95.36
_______________________________________________
Biojava-l mailing list  -  [EMAIL PROTECTED]
http://biojava.org/mailman/listinfo/biojava-l




_______________________________________________
Biojava-l mailing list  -  [EMAIL PROTECTED]
http://biojava.org/mailman/listinfo/biojava-l

Reply via email to