Ver Mensaje Individual
  #9  
Antiguo 14-04-2005
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Reputación: 27
jachguate Va por buen camino
Cool

Hola Erika.

Cita:
Empezado por erika.martinez
blastall -p blastx -d globins -i fugu_globin>resultados_test
Veo que el programa aceptaba parámetros, y que la salida es escrita en la consola. Esta información al inicio nos hubiera evitado unos cuantos rodeos...

Cita:
Empezado por erika.martinez
Params son los parámetros de entrada - salida
Params son los parámetros de entrada.... no existe tal cosa como los parámetros de salida

Cita:
Empezado por erika.martinez
pero es necesario que el programa a ejecutar tenga parámetros de salida para poder obtener una salida
Estas segura de lo que estas diciendo... ya me estas haciendo dudar...

Cita:
Empezado por erika.martinez
yo hubiera podido ejecutar directamente el programa en vez de usar un archivo bat, habria sido:

ExecuteFile('blastall', '-p blastx -d globins -i fugu_globin>resultados_test', 'c:/ncbi-blast\sequence' , SW_SHOWNORMAL)

pero esto Delphi no me lo aceptaba, no sé porque.
Es que quien hace la redirección indicada por el ">" la realiza el interprete de comandos y no el programa que ejecutas. Pero esto, si queres dejar de depender del .bat tiene una solución: Invocar al interprete de comandos.

Ahora no recuerdo exactamente el parámetro, pero creo que era /C

algo como:
Código Delphi [-]
ShellExecute(Application.Handle, 
  pchar('open'), 
  pchar('c:\windows\system32\cmd.exe'), 
  pchar('/c blastall -p blastx -d globins -i fugu_globin>resultados_test'),
  pchar('c:\ncbi-blast\sequence'));

debiera funcionar. Date cuenta que ahora mandamos a ejecutar el interprete de comandos y via parámetros le indicamos cual es el comando a ejecutar: en este caso, el blastall mas la lista de parámetros y por último la redirección. Esto es equivalente a escribir la cadena en una sesion del interprete.

Ojo, que el interprete de comandos es mejor leerlo de la variable de entorno COMSPEC, puesto que su ubicación y nombre varia entre instalaciones y versiones de windows.

Otra posible solución es mediante un PIPE del sistema redireccionar directamente la salida del programa y recogerla en un TStrings, por ejemplo. Para ello te recomiendo consultar los mensajes en este mismo foro y la ayuda de la función CreateProccess del api de windows.

Ambas soluciones son mas complicadas en principio que el bat, pero te dan independencia de este.

hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita