从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。)
上一篇: Calling python script from TCL and creating a file atomically