Я создаю отличный движок с классом GroovyShell. Затем я запускаю кучу операторов с помощью метода «оценки».
Есть ли способ поймать выход двигателя, чтобы я мог получить вывод «println»?
В настоящее время он переходит на стандартный вывод, хотя это приложение для качания.Как поймать выход GroovyShell?
3
A
ответ
2
Вы можете просто присвоить свой собственный Writer (например. StringWriter) в out
собственности в связывании и передать его в GroovyShell.
def binding = new Binding();
binding.setProperty("out", new YourWriter())
new GroovyShell(binding);
1
Вы можете установить scriptBaseClass
с помощью метода println
, и вы можете работать над этим значением. Помните, что пользователь все еще может делать System.out.println
, но you can blacklist он, при необходимости.
import org.codehaus.groovy.control.CompilerConfiguration
def script = """
a = 10
println a
println "echo"
"""
abstract class Printer extends Script {
void println(obj) {
this.binding.printed << obj
}
}
def config = new CompilerConfiguration(scriptBaseClass: Printer.class.name)
def binding = new Binding([printed: []])
new GroovyShell(this.class.classLoader, binding, config).evaluate script
assert binding.variables.printed.contains(10)
assert binding.variables.printed.contains("echo")
Смежные вопросы
- 1. Поймать непрерывный выход из подпроцесса
- 2. делает% x [] поймать весь выход?
- 3. Поймать инструкцию на выход библиотекой
- 4. попытка поймать не давая выход, как ожидается,
- 5. Как поймать выход 0 и эхо «галочка»
- 6. Выполнение кода переменной в GroovyShell
- 7. Грозит ли GroovyShell скомпилированные скрипты?
- 8. GroovyShell debug script from classpath
- 9. Динамическое добавление IntegerMetaClass к GroovyShell
- 10. Perl не может поймать выход консоли bzip2
- 11. Используйте выход в попытке поймать в C#
- 12. Использование GroovyShell в качестве «анализатора выражений/движков» (или: как повторно использовать GroovyShell)
- 13. Как использовать gdb, чтобы поймать «выход» из программы
- 14. Отладочные сценарии, загруженные GroovyShell (в eclipse)
- 15. В чем разница между GroovyShell и GroovyScriptEngine?
- 16. Поймать выход дочернего процесса дочернего процесса по модулю подпроцесса
- 17. поймать выход из Linux телнет к питон скрипт
- 18. Как создать объект GroovyShell с помощью пути класса контекста app
- 19. Как отменить изменения класса метаданных после выполнения GroovyShell?
- 20. Как я могу убедить GroovyShell поддерживать состояние над вызовами eval()?
- 21. Как поймать sun.awt.image.PNGImageDecoder $ PNGException?
- 22. Могу ли я поймать внешний выход в Эрланг?
- 23. Ловля STDERR пользовательский выход в попытке поймать питона
- 24. попытки поймать внутри пункта поймать
- 25. Как определить метод каким-то образом, как «выход» (я имею в виду, автоматически поймать блок)?
- 26. Доступ к классу домена Grails из скрипта GroovyShell
- 27. Невозможно напечатать точную строку, выполненную в groovy - GroovyShell?
- 28. Попытайтесь поймать, всегда поймать исключение
- 29. Как поймать Синатра :: NotFound?
- 30. Как поймать исключения JSON.parse()?
Thanks. Так как я делаю это из java-кода, знаете ли вы, как определить класс принтера (код Java)? –
Поскольку вы пишете 'Принтер' на Java, у вас возникают проблемы с' this.binding'? – Will
Спасибо, я это понял. –