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.