我提交以下代码,希望看到SAS一次尝试一个X命令,而不是等待提交退出'进入命令提示关闭:
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模式下,提交到呼叫系统的命令行('退出')不会关闭管理员窗口。
有解决方法吗?我不能只使用noxwait并允许所有命令提示符提交依次打开和关闭,因为x命令在嵌套宏中,并且最终有成千上万的Python调用都试图一次执行。
由于
答案 0 :(得分:1)
XSYNC
按预期工作。但是,您需要让Windows等待程序完成;使用CALL
命令或使用START /WAIT
。 This 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中的那个。< / p>