【发布时间】:2010-10-13 17:22:23
【问题描述】:
我正在编写一个脚本来提取一些关于我一直在运行的一系列化学模拟的有用数据。
要获取此数据,我需要 (1) 一个 C 程序,该程序根据名为 *.pdb 的文件类型计算密度。我已经有(1)。并且 (2) 我需要使用一个名为 vmd 的程序来获取该 pdb。为了从命令行完成(2),我可以提交一个 tcl 脚本,因为vmd 有一个内置的 tcl 解释器。
这些函数——调用 vmd 运行 tcl 脚本,然后运行编译后的 c 程序——将是我的包装数据提取脚本的关键活动。
我想消除多余的 TCL 脚本,将我的数量从 2 个脚本(用于 vmd 的包装器脚本 + tcl 脚本)减少到 1 个。但我不太确定如何执行此操作。一个可能的解决方案似乎是将我的 TCL 脚本嵌入到我的包装脚本中,如果有办法使这样的嵌入式脚本可从外部程序调用。
到目前为止,我的大部分数据收集脚本都在 BASH 中,所以理想情况下,我会坚持使用 BASH 脚本,因为我非常熟悉 bash 脚本,而对 Python/Perl 才刚刚开始了解。
这是我的问题:1.你能在 Bash 脚本中嵌入 TCL 脚本吗?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 中执行此操作,或者使用 Minotaur 库吗?我会考虑切换到 python,如果是...
http://markmail.org/message/6kogjphzqtn4ilch4. 如果不是,你会如何建议尝试合并这两个脚本(一个 tcl 例程和一个调用它的 bash 脚本)到单个文件中?5.如果有人接到这种性质的外部调用来使用 Minotaur 工作,你能发布一些解释性代码吗?
我想到了#4 的一种非嵌入解决方案,即在我的 Bash 脚本中编写一个函数,该函数使用整个 tcl 脚本编写一个文件。这样我就有一个脚本,但可以转储下标以供外部程序使用,然后将其删除。我觉得这个解决方案有点笨拙,尽管我确信它与嵌入式解决方案相比是有效的。
【问题讨论】:
-
Tcl 包含在 Python 中(尽管形式有限)。见wiki.python.org/moin/How%20Tkinter%20can%20exploit%20Tcl/…
-
那不只是TCL单线吗?我看到的所有示例都是单个命令。我想嵌入一个完整的连续脚本,例如用三重引号。 “”“”“”。这就是我准备好的牛头怪。
标签: python bash scripting tcl embedding