我想在我的TCL程序中执行具有2个参数的python函数。我的用于解压缩file.zip的python函数由以下代码定义:

# -*- coding: utf8 -*-
import zipfile
import os.path
import os

def dezipFile(filezip, pathdst = ''):

    if pathdst == '': pathdst = os.getcwd()
    zfile = zipfile.ZipFile(filezip,'r')

    for i in zfile.namelist():
            print (i)
            if os.path.isdir(i):
                    try: os.makedirs(pathdst + os.sep + i)
                    except: pass
            else:
                    try: os.makedirs(pathdst + os.sep + os.path.dirname(i))
                    except: pass
                    data = zfile.read(i)
                    fp = open(pathdst + os.sep + i, "wb")
                    fp.write(data)
                    fp.close()
    zfile.close()


然后,我想在我的TCL程序中执行此功能。我用过exec
TCL脚本:

puts "--outzip is: $outZip"
puts "--destinationDeZip is: $destinationDeZip"
set zip_status [ catch {exec python dezipFile.py ${outZip} ${destinationDeZip}} id ]
if {$zip_status == 1} {
    puts "**** Error: $id *********"
} else {
    puts "**** Pass: the zipped file $fileName is extracted *********"
}


在结果报告中,我找到了消息**** Pass: the zipped file $fileName is extracted *********
该命令似乎已传递,但是未按预期提取压缩文件。我的程序有错误吗?

ks

最佳答案

您需要在Python端添加一些额外的代码才能实际调用您定义的函数。

if __name__ == '__main__':
    import sys
    dezipFile(*sys.argv[1:])


sys.argv[1:]在脚本名称之后获取所有参数,然后执行dezipFile(*…)将所有这些参数作为单独的参数传递给dezipFile函数。

10-08 03:17