Как я могу заставить SAS дождаться полного выполнения команды? - PullRequest
1 голос
/ 07 мая 2019

У меня возникла небольшая проблема с запуском моих сеансов SAS, а затем с ожиданием завершения сценариев Python. Я использую Python для анализа Bag-of-Words с некоторым анализом Sentiment, добавленным для вкуса, и сценарий выполняется просто отлично, но SAS продолжает работать после его запуска. Это создает проблему, потому что остальная часть программы SAS требует, чтобы результаты скрипта Python работали правильно.

Я пытался использовать команду waitfor all в SAS, но, похоже, это не работает для этой конкретной проблемы.

Вот код, который я выполняю в SAS:

%pScript_loc=path\pythonTester.py; /* LOCATION OF THE PROGRAM */
filename temp pipe "otherPath\python.exe &pScript."; /* LOCATION OF PYTHON EXECUTABLE */
data _null_;
infile temp;
input;
put _infile_;
run;

waitfor _all_;

Это должно гарантировать, что программа SAS запускает программу Python, но, похоже, неэффективно заставляет SAS ждать, пока Python сделает свое дело.

Ответы [ 2 ]

2 голосов
/ 07 мая 2019

Попробуйте использовать команду x вместо шага data _null_.xsync по умолчанию включено в SAS, что означает, что ОС не вернет управление SAS, пока сценарий Python не завершится.

%let %pScript_loc=path\pythonTester.py;

x "otherPath\python.exe &pScript.";

Вы также можете по желанию использовать пакет saspy и делать все изтам, пропуская редактор SAS в целом.

0 голосов
/ 08 мая 2019

waitfor является эксклюзивным для systask с именем файла, оно немного отличается

filename x pipe 'dir';
data _NULL_;
  infile x DLM='$';
  length str $80;
  input str;
  put str;
run;
data _NULL_;
  infile x DLM='$';
  length str $80;
  input str;
  put str;
run;

каждый раз, когда файл доступа к шагу данных открывается и читается до тех пор, пока канал не будет закрыт.Это означает, что вы можете открыть одно и то же время дважды, и нет необходимости ждать завершения программы.

...