Я хотел бы выполнить внешнюю программу из программы Rascal без создания нового процесса с использованием createProcess()
и killProcess()
. Возможно ли это, или я что-то пропустил в документации?Выполнение встроенных команд
Спасибо.
Я хотел бы выполнить внешнюю программу из программы Rascal без создания нового процесса с использованием createProcess()
и killProcess()
. Возможно ли это, или я что-то пропустил в документации?Выполнение встроенных команд
Спасибо.
Это вопрос вызова функции readEntireStream
:
rascal>readEntireStream(createProcess("ls", ["-l","-a"]))
str: "total [email protected] 5 jurgenv admin 170 Mar 24 21:10 [email protected] 5 jurgenv admin 170 Mar 3 20:05 ..-rwxr-xr-x 1 jurgenv admin 25160 Feb 4 18:43 [email protected] 1 jurgenv admin 637 Apr 3 13:58 eclipse.ini-rw-r--r-- 1 jurgenv admin 64679 Mar 24 21:10 hs_err_pid25121.log"
Если вы имеете в виду под «выполнить команду»: выполните команду операционной системы, на которой вы работаете, тогда ответ нет, это невозможно. Команды OS всегда выполняются в отдельном процессе. Можете ли вы привести пример своего варианта использования?
Не команда OS. Например, у меня есть программа, которая будет форматировать (автоматически отступать, помещать вещи на новые строки и т. Д.) Файлы Java. Я использую Rascal для создания файлов Java, и я хочу отформатировать их после их создания. Таким образом, я хочу выполнить эту внешнюю программу изнутри Rascal. Я, конечно, могу 'createProcess()' затем блокировать до тех пор, пока он не будет закончен, и это то, что я делаю. Мне просто интересно, есть ли другой способ. Обновлен мой вопрос, чтобы изменить фразу «выполнить команду». – josh
И это убьет процесс после его завершения? – josh
потоки будут закрыты и процесс ОС будет убит, но будет утечка памяти, если вы также не убьете этот процесс. Таким образом, чтобы сохранить int id, а также убить его, использование 'killProcess' было бы полезно. Я добавлю функцию удобства в библиотеку. – jurgenv
Это замечательно. Как всегда, спасибо за помощь. – josh