首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用tcl中的参数调用python脚本

使用tcl中的参数调用python脚本
EN

Stack Overflow用户
提问于 2018-08-16 20:25:00
回答 2查看 279关注 0票数 1

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

代码语言:javascript
复制
# -*- 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脚本:

代码语言:javascript
复制
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 *********。命令似乎被传递了,但是压缩文件并没有像预期的那样被解压。我的程序中有什么错误吗?

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-16 20:41:40

您需要在Python端编写一些额外的代码来实际调用您定义的函数。

代码语言:javascript
复制
if __name__ == '__main__':
    import sys
    dezipFile(*sys.argv[1:])

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

票数 1
EN

Stack Overflow用户

发布于 2018-08-21 07:00:39

这不是一个答案,更多的是一个改进的建议:我假设你知道你没有求助于Python来解压和访问Tcl中的ZIP存档的内容?

首先,您可能需要考虑使用tcllib模块zipfile::decode

代码语言:javascript
复制
package require Tcl 8.6
package require zipfile::decode

try {
    ::zipfile::decode::unzipfile $outZip $destinationDeZip
} on error {errMsg opts} {
    # ...
}

(这里假设您可以使用Tcl 8.6。)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51877032

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档