Код Python в USS на z / OS Mainframe - квадратные скобки не распознаны - PullRequest
3 голосов
/ 21 октября 2019

Я пытаюсь выполнить приведенный ниже код Python в z / OS Mainframe USS. Проблема, с которой я сталкиваюсь, заключается в том, что когда я запускаю код, я получаю следующее сообщение об ошибке. Кажется, квадратные скобки не распознаются в моем коде.

  File "/u/q123/python/pyfilr.py", line 11
    print(lineï..0:4ï..)                   
              ¬                            
SyntaxError: invalid syntax 

Ниже приведен мой код:

#!/usr/local/bin/rocket/python/python27                                 
# -*- coding: utf-8 -*-                                                 
import os                                                               
import json                                                             
def main():                                                             
    curpath = os.path.abspath(os.curdir)                                                      
    inp_file_path = os.path.join(curpath, os.path.join("python","inp.txt")
    file1 = open(inp_file_path,"r") 
    line = file1.readline().strip() 
    while line!="":
        print(line[0:4])
        jsonstr = json.dumps(line)
        line = file1.readline().strip()
        print(jsonstr)
    file1.close()
if __name__ == "__main__":
    main()   

Если убрать 2-ую строку "# - - coding:utf-8 - - "в моем коде, то он выводит сообщение об ошибке ниже.

SyntaxError: Non-ASCII character '\xdd' in file /u/q123/python/pyfilr.py on line 11, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details

Я не уверен, как исправить ошибку. Я использую python 2.7.

Можете ли вы предложить решение этой проблемы, чтобы я мог использовать квадратные скобки в своем коде ?.

Ответы [ 2 ]

2 голосов
/ 22 октября 2019

Поскольку вы используете python 2.7, сценарий python должен быть файлом ASCII, а в вашем сеансе должно быть включено автоматическое преобразование. Вот что будет работать:

export _BPXK_AUTOCVT=ON
export _CEE_RUNOPTS="FILETAG(AUTOCVT,AUTOTAG) POSIX(ON)"
iconv -f ibm-1047 -t utf-8 pyfilr.py >pyfilrA.py
chtag -t -c utf-8 pyfilrA.py
python pyfilrA.py

Также добавьте отсутствующую закрывающую скобку в строку 7 вашего скрипта.

2 голосов
/ 22 октября 2019

Ascii очень глубоко встроен в Python, что является проблемой в z / OS, которая изначально поддерживает EBCDIC. Вы можете использовать команду chtag, чтобы указать z / OS на обработку файла как определенной кодировки. Чтобы увидеть, если файл уже помечен, вы можете выполнить команду

ls -T <filename>

Чтобы пометить файл, вы можете выполнить команду

chtag -tvc UTF-8 <filename>

Я бы предложил удалить файл, прикоснуться к пустому файлу, пометить его, а затем поместить в него содержимое, а не просто пометить файл.

...