Я хочу вызвать программу SAS из другой программы в Windows. У меня есть некоторый опыт вызова SAS из командной строки в пакетном режиме, но нет реального опыта получения сообщений от него и обработки этих сообщений. Я погуглил и нашел довольно много информации о чтении из stdin из программы SAS, но я не могу понять, как заставить мою программу SAS записывать в stdout или stderr. Могу ли я сделать это даже в Windows?
Из программы SAS я хотел бы сделать следующее:
Вот что я пробовал:
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, который вызывает 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()
Мои результаты на консоли:
('', '')