opencc-python icon indicating copy to clipboard operation
opencc-python copied to clipboard

Use sys.stdin/sys.stdout instead of io.open(0/1) for better compatibility

Open rintrint opened this issue 8 months ago • 0 comments

https://github.com/yichen0831/opencc-python/blob/b85452e384a3650109809fe5fefacb2ae4fe89d2/opencc/main.py#L30-L35

Using 0 as a fallback for the input file can lead to a type error since io.open expects a filename. Consider using sys.stdin directly when no input file is provided.

    if args.input:
        with io.open(args.input, encoding=args.in_enc) as f:
            input_str = f.read()
    else:
        input_str = sys.stdin.read()
    output_str = cc.convert(input_str)
    if args.output:
        with io.open(args.output, 'w', encoding=args.out_enc) as f:
            f.write(output_str)
    else:
        sys.stdout.write(output_str)

or

    if args.input:
        with io.open(args.input, encoding=args.in_enc) as f:
            input_str = f.read()
    else:
        if sys.version_info[0] >= 3:
            input_str = sys.stdin.read()
        else:
            sys.stdin.read().decode(args.in_enc)

    output_str = cc.convert(input_str)

    if args.output:
        with io.open(args.output, "w", encoding=args.out_enc) as f:
            f.write(output_str)
    else:
        if sys.version_info[0] >= 3:
            sys.stdout.write(output_str)
        else:
            sys.stdout.write(output_str.encode(args.out_enc))

rintrint avatar May 05 '25 14:05 rintrint