2014-03-12 45 views
1
需要NOXSYNC行爲不

我提出下面的代碼期待看到SAS嘗試一個X命令的時間,而不是等待提交「退出」進入命令提示符的關閉:的解決方法,如SAS

options noxwait xsync; 

data _null_; 
x 'cd C:\Python33'; 
x 'start test.py'; 
run; 

data _null_; 
call system ('exit'); 
run; 

data _null_; 
x 'cd C:\Python33'; 
x 'start test.py'; 
run; 

data _null_; 
call system ('exit'); 
run; 

data _null_; 
x 'cd C:\Python33'; 
x 'start test.py'; 
run; 

data _null_; 
call system ('exit'); 
run; 

data _null_; 
x 'cd C:\Python33'; 
x 'start test.py'; 
run; 

data _null_; 
call system ('exit'); 
run; 

data _null_; 
x 'cd C:\Python33'; 
x 'start test.py'; 
run; 

data _null_; 
call system ('exit'); 
run; 

取而代之的是代碼啓動每個按順序調用一些Python代碼的實例,但不會等待前一個實例完成。這是'noxwait xsync'組合的正確行爲嗎?

如果是這樣,我正在嘗試使用「呼叫系統('出口')的工作。如果你在xwait模式下運行代碼,你會得到兩個命令提示符窗口。一個是系統管理員窗口,另一個是調用代碼的窗口。

無論是否選擇noxwait或xwait,調用代碼的方法總是關閉。如果選擇了noxwait,所有窗口最終都會自行關閉。在xwait模式下,提交到'call system('exit')的命令行不會關閉管理員窗口。

有沒有辦法解決這個問題?我不能僅僅使用noxwait並且允許所有的命令提示符依次打開和關閉,因爲x命令在嵌套宏中,並且最終成千上萬個試圖同時執行的Python調用。

謝謝

+0

順便說一句,在宏代碼中只有一個x命令提交的實例,而不是五個。我剛剛使用了多個來快速表明我的觀點。 – user3043997

+0

首先,在開放代碼中使用'x',而不是'data_null_'步驟。你能證實這不是問題嗎? – Joe

+0

對啊,對不起......認爲它需要在數據步驟中運行......我在開放代碼中運行它並沒有什麼區別。 – user3043997

回答

1

XSYNC正如人們所期望的那樣工作。但是,您需要讓Windows等待程序完成;請使用CALL命令或使用START /WAITThis question進入了一些細節的差異。

請看下面的例子。這裏我使用記事本作爲示例程序;你的python腳本應該有相似的行爲 - 保持X窗口處於打開狀態,直到關閉或結束,然後打開下一個窗口。

C:\ TEMP \ runtest.bat包含

cd c:\windows 
start /wait notepad.exe 

SAS程序:

options xsync noxwait; 
x 'c:\temp\runtest.bat'; 
x 'c:\temp\runtest.bat'; 

一個記事本窗口應該打開,然後當你關閉它,第二個應該打開。您也許可以直接跳過.bat文件,也可以直接運行start /wait

您可以通過使用多個python程序創建一個.bat文件,並使用start /wait運行它們中的每一個,並根據您的使用案例和首選項調用SAS中的一個來執行相同的操作。

+0

我的代碼發生了什麼事情,但是SAS循環的執行速度比Python代碼快。每次發生這種情況時,每個Python腳本運行的速度會越來越慢,直到所有內容都停止運行,並且在使用noxwait時有數百或數千個窗口打開。 – user3043997

+0

運行上面的內容,按照您的預期並按照我的看法進行上述工作嗎? – Joe

+0

我還沒有得到Windows 7 ...我仍然很不幸... – user3043997