首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UTF-8到EBCDIC在USS上使用iconv -script

UTF-8到EBCDIC在USS上使用iconv -script
EN

Stack Overflow用户
提问于 2020-01-29 19:08:18
回答 1查看 1K关注 0票数 0

我正在尝试将USS上的目录列表中的utf-8文件转换为ebcdic文件,然后再将它们转换为z/OS数据集。

使用我在堆栈溢出中找到的助手函数(谢谢!)我可以在python脚本中发出shell命令:

代码语言:javascript
复制
def r(cmd_line): 
     return Popen(cmd_line.split(), stdout=PIPE).communicate()[0]

使用此方法,我可以从USS-file分配和填充大型机数据集,使用

代码语言:javascript
复制
 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是新安装的,所以我不能问我店里的任何人,我是目前唯一对它感兴趣的人。有什么主意吗?提前谢谢!

EN

回答 1

Stack Overflow用户

发布于 2020-01-30 20:43:01

虽然不符合python的真正精神,但是您可以通过在python脚本中包装USS命令来做您想做的事情。下面是一个示例:

代码语言:javascript
复制
#!/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()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59973962

复制
相关文章

相似问题

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