从TCL调用python脚本并自动创建一个文件

我写了一个python脚本,负责按照其他问题中所述的方式自动创建一个文件。 由脚本创建的文件有点大(约1.5MB),如下所示:

$ ./my_script.py --output_file some_directory/my_file.txt
$ ls -l --block-size=K some_directory/my_file.txt
-rw------- 1 foouser foogroup 1477K Aug  7 17:39 some_directory/my_file.txt

不幸的是,由于一些遗留的基础设施和事情的设置方式,这个脚本需要从TCL脚本中调用。 以下是我目前正在这样做的方式:

#!/usr/bin/env tclsh
set PY_SCRIPT my_script.py
puts [exec $PY_SCRIPT --output some_directory/my_file.txt]

我所看到的问题是生成的文件似乎不再以原子方式创建(原子性是我的应用程序的一项要求)。 TCL放命令文档说明如下:

Tcl在内部缓冲输出,所以用put写入的字符可能不会立即出现在输出文件或设备上; Tcl通常会延迟输出,直到缓冲区满或通道关闭。

我相信这解释了为什么我的文件没有被原子创建了。 我不是TCL的专家,所以我不知道如何在TCL脚本中完成原子文件的创建。

有什么建议么?


直接翻译你链接到的Python代码将会是这样的(未经测试的代码):

package require Tclx

set f [open $tmpFile w]
puts -nonewline $f $text
sync $f    ; # flush is performed implicitly
close $f

file rename -force $tmpFile $myFile

TclX包需要获取sync命令。 (这可能不适用于Windows。)

链接地址: http://www.djcxy.com/p/67747.html

上一篇: Calling python script from TCL and creating a file atomically

下一篇: foreach command in tcl to read a file