Подтвердить что ты не робот

Как я могу сделать паузу ядра Mathematica для создания внешнего файла

Можно ли приостановить работу ядра Mathematica во время вычисления? Вот пример.

Module[{},
       Mathematica code....
       ..........
       ..........
       {
        Calls an external program with some argument
        Needs to wait for an external program to create a file (* How ?*)
        }
       Mathematica code using that file content....
       ...........
       ...........
      ]

Я могу придумать решение цикла Do[..], которое продолжает проверять в указанном каталоге, создан ли файл или нет. Как только он находит файл, он считывает содержимое и остаток кода Mathematica обрабатывает данные.

Есть ли элегантный способ решить эту проблему?

BR

4b9b3361

Ответ 1

Попробуйте Pause[n], пауза не менее n секунд.

Изменить. Чтобы заставить его работать в течение неопределенного времени, вам необходимо повторно опросить файловую систему. FileExistsQ делает это, и вы будете использовать его как

While[!FileExistsQ[ "filename" ], Pause[1]]

у которого не было бы одной секунды потерянного времени во время ожидания.

Дальнейшее редактирование. Вы также можете поместить опрос существования файла в пакетный файл, тем самым освободив сеанс Mathematica. Например. создайте пакетный файл C:\Temp\Test.bat, содержащий:

@echo off
start /min apame_win64 input
echo Loop commenced %TIME%
:loop
rem wait three seconds
ping localhost -n 3 > nul
if not exist c:\temp\alldone.txt goto loop
rem wait while file is completely written out
ping localhost -n 3 > nul
rem then terminate the process
taskkill /f /fi "imagename eq apame_win64.exe"
exit

И назовите его из Mathematica: Run["start /min c:\\temp\\test.bat"]

Эта пакетная демонстрация предполагает, что apame_win64 выведет файл alldone.txt для завершения.

Ответ 2

Вы вызываете внешнюю программу, выходит ли эта программа после создания файла? Если это так, то RunThrough - это то, что вы ищете, см. Пример RunThrough. Там они используют другой экземпляр Mathematica в качестве внешней программы (например, выполнение Mathematica script и ожидание ее результата).

Если внешняя программа должна оставаться запущенной после создания файла, вы можете использовать отдельный script (shell script, python, ruby ​​...), чтобы проверить, существует ли файл.