Нед Батчелдер, в этом посте , перечислены несколько десятков различных инструментов, которые вы можете выбрать для анализа в Python любого произвольного языка (хотя я не совсем понимаю, почему вы не хотите использовать сам Python как «язык для определения набора команд для выполнения», я уверен, у вас есть свои причины). Как упоминает Грегг, одним из этих инструментов Ned списков является pyparsing, но есть и более тридцати других, поэтому вы можете посмотреть, прежде чем выбрать тот, который вам по вкусу.
Как только вы преобразовали свой исходный язык ввода в синтаксическое дерево или другое удобное представление в памяти, вы можете просто пройтись по дереву и выполнять его по ходу (вставка значений переменных, переходы по условным выражениям и циклам и т. Д.). Помимо способности запускать внешние процессы (например, через подпроцесс, независимо от того, завернуты ли они, как подсказывает Грегг, или нет), не забывайте, что сам Python может выполнять некоторые ваши элементарные команды, не нарушая пот, и, когда это возможно, это будет значительно быстрее, чем делегирование выполнения дочернему процессу (действительно, одной из первых причин успеха Perl было то, что он мог делать много вещей в одном процессе, в то время как sh отбрасывался как сумасшедший; современные потомки sh как bash и ksh взял урок и теперь внедрил множество встроенных модулей, которые могут выполняться в том же процессе, что и основной скрипт; -).
Например, эта команда delete
в вашем примере может быть реализована "внутренне" через os.unlink (сейчас не может ссылаться на онлайн-документы Python, поскольку python.org в настоящее время недоступен из-за проблем с HW ;-) .