Захватить stdout и stderr из SAS в Windows?

Я хочу вызвать программу SAS из другой программы в Windows. У меня есть некоторый опыт вызова SAS из командной строки в пакетном режиме, но нет реального опыта получения сообщений от него и обработки этих сообщений. Я погуглил и нашел довольно много информации о чтении из stdin из программы SAS, но я не могу понять, как заставить мою программу SAS записывать в stdout или stderr. Могу ли я сделать это даже в Windows?

Из программы SAS я хотел бы сделать следующее:

  • Перенаправлять предупреждающие сообщения и сообщения об ошибках в stderr вместо их вывода в файл журнала
  • В программе 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()

Мои результаты на консоли:

('', '')
5
задан oob 23 November 2011 в 02:30
поделиться