如何在Python中运行文件夹中的Tcl脚本?

-2 投票
2 回答
562 浏览
提问于 2025-04-18 07:48

我在C盘里有一个Tcl脚本,想知道怎么从Python里运行它?(不是把Tcl脚本写在Python里再运行)

为了更清楚地说明我的问题,首先我有一个基于Tcl的程序叫做oommf,用于模拟。这里有个简单的介绍 http://math.nist.gov/oommf/

我用这个程序写了一些脚本,想用Python来运行一系列模拟,然后提取数据来画图。我的脚本是.mif格式的,我想做的是:

  1. 用Python生成.mif脚本,每次用不同的参数
  2. 用Python调用这个基于Tcl的程序来运行脚本
  3. 保存数据,然后用Python提取数据并画图

这个Tcl程序是.tcl格式的。

这个Tcl程序也可以在命令行里运行。我听说在Python中(在Windows环境下)有办法模拟命令行,但我不知道怎么做。如果有人知道,这对我会很有帮助。

(抱歉,我之前的编程知识只有一点C语言,所以我的问题可能有点模糊,因为我不知道怎么更清楚地描述它)

2 个回答

0

这里有个建议。很多内容都是猜测,因为我不太清楚你具体想做什么。

import subprocess

# 1. Code to generate .mif script, for example: my.mif
with open('my.mif', 'wb') as f:
    f.write('something')

# 2. Launch oommf. I am guessing the command line, based on your 
# description and based on what the location of tclsh in my system
cmd = ['C:/Tcl/bin/tclsh.exe', 'C:/oomf.tcl', 'my.mif']
process = subprocess.Popen(cmd, 
        stdout=subprocess.PIPE, 
        stderr=subprocess.PIPE)
stdout, stderr = process.communicate()

# 3. Now, you can do something with stdout and stderr if needed
# Below is just an example
with open('data.txt', 'wb') as f:
    f.write(stdout)
0

可以试试用 subprocess.call

subprocess.call 可以避免处理不同命令行环境中引号使用规则的问题。它接受一个列表,而不是字符串,这样参数之间的分隔就更简单了。也就是说:

import subprocess
subprocess.call(['C:\\Temp\\a b c\\Notepad.exe', 'C:\\test.txt'])

撰写回答