Можете ли вы встроить сценарий TCL в сценарий Bash или сценарий Python, который может вызываться внешними программами? - PullRequest
1 голос
/ 13 октября 2010

Я пишу сценарий для извлечения некоторых полезных данных о серии химических симуляций, которые я проводил.

Чтобы получить эти данные, мне нужна (1) C-программа, которая вычисляет плотность по типу файла с именем *.pdb. У меня уже есть (1). И (2) мне нужно использовать программу под названием vmd, чтобы получить этот pdb. Чтобы выполнить (2) из ​​командной строки, я могу представить tcl-скрипт, так как vmd имеет встроенный интерпретатор tcl.

Эти функции - вызов vmd для запуска сценария tcl, затем запуск скомпилированной c-программы - будут основными действиями моего сценария извлечения данных оболочки.

Я хотел бы убрать лишний скрипт TCL, сократив мое количество с 2 скриптов (скрипт-обёртка + скрипт tcl для vmd) до 1. Но я не совсем уверен, как это сделать. Возможно, одним из возможных решений является встраивание моего TCL-скрипта в мой скрипт-обертку, если есть способ сделать такой встроенный скрипт вызываемым из внешних программ.

Большинство моих сценариев сбора данных до сих пор были на BASH, поэтому в идеале я хотел бы придерживаться сценария BASH, поскольку я очень хорошо знаком с сценариями bash, а не только с начальными знаниями Python / Perl.

Вот мои вопросы:
1. Можете ли вы встроить скрипт TCL в скрипт Bash?
2. Можете ли вы сделать этот скрипт вызываемым из внешней программы?
например в псевдокоде:

#!/bin/bash
....
tclembed extract {
   #tcl script
   ...
}
...
vmd -dispdev text -e extract.tcl >& extract_results.log #where vmd is 
                                                        #an external program

3. Если ответ на вопрос № 2 отрицательный, можете ли вы сделать это на Python, возможно, с помощью библиотеки Минотавра? Я бы рассмотрел переход на python, если так ...
http://markmail.org/message/6kogjphzqtn4ilch
4. Если нет, то как бы вы предложили попытаться объединить эти два сценария (подпрограмма tcl и вызывающий его сценарий bash) в один файл?
5. Если кто-то получил внешние вызовы такого рода для работы с использованием Минотавра, вы можете опубликовать некоторый пояснительный код?

Я подумал об одном решении без встраивания, которое касается # 4, которое должно было бы написать функцию в моем сценарии Bash, которая записывает файл со всем сценарием tcl. Таким образом, у меня был бы один сценарий, но я мог бы сбросить индекс для использования с внешними программами, а затем удалить его. У меня такое ощущение, что это решение довольно глупое, хотя я точно знаю, что оно работает, в отличие от встроенных решений.

Ответы [ 2 ]

4 голосов
/ 13 октября 2010

Было несколько сплавов Tcl-Python. Как комментирует Рэйф Кеттлер выше наброски, нужно начать со стандартной установки Python. Это включает в себя Tkinter, в который встроен полный интерпретатор Tcl, доступный, как описано на упомянутой вики-странице. Так что, да, возможно "сделать это в Python".

Я действительно не понимаю, как это связано с vmd , хотя. vmd уже встроил интерпретатор Tcl. Хотя я полностью поддерживаю цель «сокращения движущихся частей», чтобы у вас, например, один сценарий, а не два, что-то кодировал в Python, когда vmd уже предоставляет Tcl, это не кажется как шаг в направлении, в котором хочет идти Джейсон Р. Мик.

ЧТО-ТО ПОЗЖЕ: после обмена комментариями с Джейсоном Миком мне пришло в голову, что он может найти

#!/bin/bash


echo "Here's 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's 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 is одинаково искусен с любым из них.

Наконец, и Python, и Tcl являются языками общего назначения, обладающими примерно такой же мощью, что и bash , поэтому еще одно направление развития этого проекта - написать его полностью на Tcl (или Python), а не Баш Встраивание сценариев, как показано выше, в Tcl (или Python), по крайней мере, так же просто, как в bash.

1 голос
/ 13 октября 2010

1. Можете ли вы встроить скрипт TCL в скрипт Bash?

Не легко.Лучший способ - записать сценарий во временный файл и передать имя этого файла в tclsh (или wish, если это программа Tcl / Tk).Это должно быть «простым делом программирования», т. Е. Неуклюжим кодированием, но не принципиально сложным.

2. Можете ли вы сделать этот скрипт вызываемым из внешней программы?

Я не совсем понимаю, что вы хотите сделать здесь.Вы можете поставить строку #! в начале сценария Tcl и отметить исполняемый файл.Это хорошо работает.Лучший способ сделать это - this :

#!/usr/bin/env tclsh8.5
your tcl script here...

3. Если ответ на вопрос № 2 отрицательный, можете ли вы сделать это в Python?

На этой вики-странице упоминается нечто, называемое Typcl, которое, как сообщается, позволяет выполнять Tcl из Python.Я никогда не пробовал.

(я думаю, что вопросы 4 и 5 в значительной степени не имеют значения, основываясь на моих ответах выше.)

...