我想從Windows上的另一個程序調用SAS程序。我有一些在批處理模式下從命令行調用SAS的經驗,但沒有真正的經驗從它接收消息並處理這些消息。我搜索了很多關於從SAS程序中讀取stdin的信息,但似乎無法弄清楚如何讓我的SAS程序寫出stdout或stderr。我可以在Windows中做到這一點嗎?在Windows中從SAS捕獲stdout和stderr?
從SAS程序,我想做到以下幾點:
- 重定向警告信息和錯誤信息,而不是到stderr它們打印到日誌文件
- 內SAS程序,手動檢測錯誤和/或其他問題並將它們輸出到stderr或stdout。
這是我曾嘗試:
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()
我從這個控制檯上的結果:
('', '')
我從來沒有使用SAS,但它是一個控制檯應用程序?它可能沒有stdout/stderr的句柄。在這種情況下,嘗試使用PyWin32的'win32com'模塊[使用OLE自動化SAS](http://support.sas.com/documentation/cdl/en/hostwin/63285/HTML/default/viewer.htm#oleauto.htm)。 – eryksun
以下是有關使用可能有所幫助的未命名管道的SAS文檔的鏈接: http://support.sas.com/documentation/cdl/en/hostwin/63285/HTML/default/viewer.htm#unnamed.htm – RWill