我正在尝试将USS上的目录列表中的utf-8文件转换为ebcdic文件,然后再将它们转换为z/OS数据集。
使用我在堆栈溢出中找到的助手函数(谢谢!)我可以在python脚本中发出shell命令:
def r(cmd_line):
return Popen(cmd_line.split(), stdout=PIPE).communicate()[0]使用此方法,我可以从USS-file分配和填充大型机数据集,使用
r("tso alloc DSNAME(...) etc.") # to allocate a mainframe DS and
r("tso oget ...") # to populate the mainframe DS但是:有些文件需要首先转换,在simply脚本中,我只需用它进行编码。
iconv -f UTF-8 -t IBM-1141 $utf8_file > $ebcdic_file
我完全不知道如何在python (2.7)中做到这一点?
因为python是新安装的,所以我不能问我店里的任何人,我是目前唯一对它感兴趣的人。有什么主意吗?提前谢谢!
发布于 2020-01-30 20:43:01
虽然不符合python的真正精神,但是您可以通过在python脚本中包装USS命令来做您想做的事情。下面是一个示例:
#!/bin/env python
from cStringIO import StringIO
import os
import sys
def r(cmd):
import subprocess
return subprocess.Popen(cmd, stdout=subprocess.PIPE).communicate()[0]
def allocate_dataset(dsName):
name = "'" + dsName + "'"
out = r(['/bin/tso', 'alloc', 'ds(' + name + ')', 'space(6000 2000)', 'track', 'lrecl(80)',
'dsntype(library)', 'blksize(3200)', 'recfm(f b)', 'dir(2)', 'new'])
for line in out.split():
print line
def not_allocated(dsName):
name = "'" + dsName + "'"
out = r(['/bin/tsocmd', 'listds ' + name])
for line in out.split():
if "NOT IN CATALOG" in out:
return True
return False
def ascii_to_ebcdic(from_codepage, to_codepage, fileName):
os.system('iconv -f' + from_codepage + ' -t' + to_codepage + ' <' + fileName + ' >ebcdic_' + fileName)
def copy_to_dataset(fileName, dsName, memberName):
dsn = "//'" + dsName + '(' + memberName + ")'"
os.system('cp -T ' + fileName + ' "' + dsn + '"')
def main():
dsName = "HLQ.MY.PYTHON"
if not_allocated(dsName):
print("Allocating '" + dsName + "' data set")
allocate_dataset(dsName)
ascii_to_ebcdic("UTF-8", "IBM-1047", "test.txt")
copy_to_dataset("ebcdic_test.txt", "HLQ.MY.PYTHON", "TXT")
member = "//'HLQ.MY.PYTHON(TXT)'"
os.system('cat -v "' + member + '"')
main()https://stackoverflow.com/questions/59973962
复制相似问题