Quiero llamar a un programa SAS desde otro programa en Windows. Tengo cierta experiencia invocando a SAS desde la línea de comandos en el modo por lotes, pero no tengo experiencia en recibir mensajes y manejar esos mensajes. Busqué en Google y encontré bastante información acerca de cómo leer desde stdin desde un programa SAS, pero parece que no puedo entender cómo hacer que mi programa SAS escriba en stdout o stderr. ¿Puedo hacer esto en Windows?Capture stdout y stderr de SAS en Windows?
Desde el programa SAS, me gustaría hacer lo siguiente:
- redirección de mensajes de advertencia y mensajes de error en stderr en lugar de imprimirlos en el fichero de registro
- Dentro del programa SAS, manualmente detectar errores y/u otros problemas y enviarlos a stderr o stdout.
Esto es lo que he intentado:
SAS
data test;
attrib i length=8;
do i = 1 to 10;
put 'putting'; *how can i make this go to stdout?;
putlog 'putting to log'; *this can go to the log - that is okay;
if i = 5 then do;
*pretend this is an error I am manually detecting - how can i make this go to stderr?;
put 'we found 5';
end;
output;
end;
run;
data _null_;
1 = y; *this is an error detected by SAS. How can I make this go to stderr?;
run;
Python que llama al SAS:
import subprocess
import os
if __name__ == '__main__':
filename = os.path.normpath(r'C:\Users\oob\Desktop\sas_python_test.sas')
sas_executable = os.path.normpath(r'C:\Program Files\SAS\SASFoundation\9.2\sas.exe')
cmd = r'"' + sas_executable + r'"' + " " + r'"' + filename + r'"'
p = subprocess.Popen(cmd,shell=False,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
print p.communicate()
Mis resultados en la consola de esto son:
('', '')
Nunca he usado SAS, pero ¿es una aplicación de consola? Es posible que no tenga controladores para stdout/stderr. En ese caso, pruebe el módulo 'win32com' de PyWin32 para [automatizar SAS utilizando OLE] (http://support.sas.com/documentation/cdl/en/hostwin/63285/HTML/default/viewer.htm#oleauto.htm). – eryksun
Aquí hay un enlace a la documentación de SAS sobre el uso de las tuberías sin nombre que pueden ser útiles: http://support.sas.com/documentation/cdl/en/hostwin/63285/HTML/default/viewer.htm#unnamed.htm – RWill