使用来自 tcl 的参数调用 python 脚本
Calling python script with parameters from tcl
我想在我的 TCL 程序中执行一个有 2 个参数的 python 函数。我的 python 解压缩 file.zip 函数由以下代码定义:
# -*- 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 *********
。
该命令似乎已通过,但未按预期提取压缩文件。我的程序有什么错误吗?
谢谢。
您需要在 Python 端添加一些额外的代码才能实际调用您定义的函数。
if __name__ == '__main__':
import sys
dezipFile(*sys.argv[1:])
sys.argv[1:]
获取脚本名称后的所有参数,然后执行 dezipFile(*…)
将所有参数作为单独的参数传递给 dezipFile
函数。
这不是一个答案,更多的是一个改进建议:我假设您知道您不必诉诸 Python 来解压缩和访问 Tcl 中的 ZIP 存档的内容?
您可能要考虑使用 tcllib
模块 zipfile::decode
,首先:
package require Tcl 8.6
package require zipfile::decode
try {
::zipfile::decode::unzipfile $outZip $destinationDeZip
} on error {errMsg opts} {
# ...
}
(假设您可以使用 Tcl 8.6。)
我想在我的 TCL 程序中执行一个有 2 个参数的 python 函数。我的 python 解压缩 file.zip 函数由以下代码定义:
# -*- 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 *********
。
该命令似乎已通过,但未按预期提取压缩文件。我的程序有什么错误吗?
谢谢。
您需要在 Python 端添加一些额外的代码才能实际调用您定义的函数。
if __name__ == '__main__':
import sys
dezipFile(*sys.argv[1:])
sys.argv[1:]
获取脚本名称后的所有参数,然后执行 dezipFile(*…)
将所有参数作为单独的参数传递给 dezipFile
函数。
这不是一个答案,更多的是一个改进建议:我假设您知道您不必诉诸 Python 来解压缩和访问 Tcl 中的 ZIP 存档的内容?
您可能要考虑使用 tcllib
模块 zipfile::decode
,首先:
package require Tcl 8.6
package require zipfile::decode
try {
::zipfile::decode::unzipfile $outZip $destinationDeZip
} on error {errMsg opts} {
# ...
}
(假设您可以使用 Tcl 8.6。)