Я пишу script, чтобы извлечь некоторые полезные данные о серии химических симуляций, которые я использовал.
Чтобы получить эти данные, мне нужна (1) C-программа, которая вычисляет плотность из типа файла, называемого *.pdb
. У меня уже есть (1). И (2) Мне нужно использовать программу под названием vmd
для получения этого pdb. Чтобы выполнить (2) из командной строки, я могу отправить tcl script, поскольку vmd
имеет сборку в tcl-интерпретаторе.
Эти функции - вызов vmd для запуска tcl script, а затем выполнение скомпилированной c-программы - это ключевые действия моего извлечения данных оболочки script.
Я хотел бы устранить лишний TCL script, уменьшив число из 2 сценариев (обертка script + tcl script для vmd) до 1. Но я не уверен, как это сделать. По-видимому, одним из возможных решений является встроить мой TCL script в мою оболочку script, если есть способ сделать такой встроенный script доступным для внешних программ.
Большинство моих сценариев сбора данных до сих пор находились в BASH, поэтому в идеале я хотел бы придерживаться BASH script, поскольку я очень хорошо знаком с сценарием BASH, поскольку имею только начало знания Python/Perl.
Вот мои вопросы: 1.
Можете ли вы встроить TCL script внутри BASH script? 2.
Можете ли вы сделать этот script доступным для внешней программы?
например в псевдокоде:
#!/bin/bash
....
tclembed extract {
#tcl script
...
}
...
vmd -dispdev text -e extract.tcl >& extract_results.log #where vmd is
#an external program
3.
Если ответ на # 2 - нет, можете ли вы сделать это на Python, возможно, с помощью библиотеки Minotaur? Я бы рассмотрел переход на python, если так...
http://markmail.org/message/6kogjphzqtn4ilch 4.
Если нет, как бы вы предложили попытаться объединить эти два сценария (подпрограмму tcl и BASH script, которая вызывает это) в один файл? 5.
Если кто-то получил внешние вызовы такого характера для работы с помощью Minotaur, можете ли вы разместить пояснительный код?
Я подумал о одном не-встраивающем решении, которое должно быть # 4, которое должно было бы написать функцию в моем BASH script, который записывает файл со всем tcl script. Таким образом, у меня был бы единственный script, но он мог бы сбрасывать индекс для использования с внешними программами, а затем удалять его. У меня такое ощущение, что это решение является довольно глупым, хотя я точно знаю, что он работает, а также встроенные решения.
Было несколько сплавов Tcl-Python. Как отмечает Rafe Kettler над эскизами, место для начала - стандартная установка Python. Это включает в себя Tkinter, который строит полный интерпретатор Tcl, доступный, как описано на упомянутой странице Wiki. Итак, да, это возможно "сделать это в Python".
Я действительно не понимаю, что это связано с vmd. vmd уже работает в Tcl-интерпретаторе. Хотя я полностью поддерживаю цель "сокращения движущихся частей", так что у вас есть, например, один script, а не два, кодирующий что-то в Python, когда vmd уже предоставляет Tcl, doesn Кажется, это шаг в сторону Джейсона Р. Мика хочет пойти.
SOMEWHAT LATER: после обмена комментариями с Джейсоном Р. Миком мне пришло в голову, что он может найти
#!/bin/bash
echo "Here a bit of bash-iness."
MYSCRIPT='
puts "Here I am, inside Tcl."
puts "See? I can do calculations: [expr 3 + 5]."
exit 0
'
tclsh << HERE
$MYSCRIPT
HERE
наводит на мысль. Его выход, конечно,
Here a bit of bash-iness.
Here I am, inside Tcl.
See? I can do calculations: 8.
Я написал это в терминах tclsh, но, если я не отстаю, Джейсон Р. Мик на самом деле захочет использовать vmd. Соответствующий гомолог для * vmd - это что-то вроде
...
vmd -dispdev text -eofexit << HERE > output.log
$MYSCRIPT
HERE
Пока я могу думать о нескольких других способах объединения bash и Tcl, я считаю, что это наиболее в духе оригинального вопроса.
Хочу также отметить, что из того, что мне известно о vmd, было бы вполне целесообразно сделать то же самое с Python вместо Tcl: vmd также хорошо разбирается.
Наконец, оба Python и Tcl - это языки общего назначения, имеющие примерно такую же мощность, что и bash, поэтому еще одно направление для этого проекта - записать его полностью в Tcl (или Python), а не bash. Встраивание сценариев по пути, проиллюстрированному выше, по меньшей мере так же легко в Tcl (или Python), как в bash.
vmd -dispdev text -eofexit << HERE > output.log
. Разместите, пожалуйста, когда сможете! Красиво сделано!
1.
Можете ли вы встроить TCL script внутри Bash script?
Не легко. Лучший способ - записать script во временный файл и передать имя этого файла в tclsh
(или wish
, если это программа Tcl/Tk). Это должен быть "простой вопрос программирования", т.е. Некоторая неудобная кодировка, но не принципиально сложная.
2.
Можете ли вы сделать эту script вызываемой внешней программой?
Я не совсем понимаю, что вы хотите здесь сделать. Вы можете поместить строку #!
в начале Tcl script и пометить исполняемый файл. Это хорошо работает. Лучший способ сделать это - this:
#!/usr/bin/env tclsh8.5
your tcl script here...
3.
Если ответ на # 2 - нет, можете ли вы сделать это в Python?
Эта страница wiki упоминает что-то типа Typcl, о котором сообщается, что позволяет делать Tcl изнутри Python. Я никогда не пробовал.
(Я думаю, что вопросы 4 и 5 в значительной степени не имеют отношения к моим ответам выше).