Как указывает Саймон, Switch
является правильным инструментом для процедурных условий и более подходит, чем Piecewise
.Вот то же решение, использующее Switch
:
BackgroundProcess[proc_String] :=
Switch[$OperatingSystem,
"MacOSX" | "Unix", Run["(" <> proc <> ")&"],
"Windows", Run["start /b " <> proc],
_, $Failed]
. Вы можете написать функцию-оболочку, например, которая обрабатывает несколько ОС.
BackgroundProcess[proc_String] :=
Module[{
command = Piecewise[{
{proc <> " &", $OperatingSystem == "MacOSX" || "Unix"},
{"start /b " <> proc, $OperatingSystem == "Windows"}
}]
},
Run[command]]
/b
после start
запускает процесс в фоновом режиме, не вызывая нового командного окна, и вывод выводится на стандартный вывод.Затем вы можете опираться на это, чтобы включить сообщения об ошибках, некоторую дезинфекцию ввода (например, не разрешать rm
и т. П.), Если хотите, и все должно быть настроено.
Предопределенная функция изMathematica (если она существует), вероятно, будет в том же духе.Фоновые процессы по своей природе зависят от ОС, поэтому не существует реального «независимого от платформы» способа сделать это.Любая реализация, которая претендует на это (например, модуль os в python), в основном представляет собой набор правил, определенных для каждой возможной известной ОС, так что вам не нужно беспокоиться о мелких деталях.