Как я могу сделать паузу ядра 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
Ответы
Ответ 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 ...), чтобы проверить, существует ли файл.