Python標準入力と Java

改行で標準入力→リストで取得の Python スクリプト、改行2回で標準入力が完了するスクリプト
stdio.py

# -*- coding: UTF-8 -*-
import sys

class Stdio:
    # 標準入力
    @staticmethod
    def input():
        inlist = []
        try:
            while True:
                i = input('')
                if i=='':break
                inlist.append(i)
        except EOFError:
            pass
        return inlist
    # list 改行無し標準出力
    @staticmethod
    def out(list):
        for n in list:
            sys.stdout.write(n)
    # list 改行無し標準エラー出力
    @staticmethod
    def err(list):
        for n in list:
            sys.stderr.write(n)

↑ を実行する Python
test.py

# -*- coding: UTF-8 -*-
from stdio import Stdio

list = Stdio.input()
Stdio.out(list)

Pythonスクリプト test.py をJavaから実行、
Script_exec · yipuran/yipuran-core Wiki · GitHub を参照

int sts = ScriptExecutor.run(()->"python test.py"
, ()->Arrays.asList("あabc", "A", "1", "\n").stream().map(e->e + "\n").collect(Collectors.toList())
, e->{
   System.out.println(e);
},(e, x)->{
   System.out.println(e);
   x.printStackTrace();
});

標準出力結果

あabcA1

Pythonスクリプトユニコードで渡す場合

int sts = ScriptExecutor.run(()->"python test.py"
, ()->Arrays.asList("あabc", "A", "1", "\n").stream().map(e->UnicodeTool.convertToUnicode(e) + "\n").collect(Collectors.toList())
, e->{
   System.out.println(e);
   System.out.println(UnicodeTool.convertToOiginal(e));
},(e, x)->{
   System.out.println(e);
   x.printStackTrace();
});

UnicodeToolは、

public final class UnicodeTool {
   private UnicodeTool(){}
   /**
    * Unicode文字列に変換する("あ" -> "\u3042")
    * @param original
    * @return
    */
   public static String convertToUnicode(String string){
      if (string==null || string.isEmpty()) return "";
      StringBuilder sb = new StringBuilder();
      for(int i = 0; i < string.length(); i++){
         sb.append(String.format("\\u%04X", Character.codePointAt(string, i)));
      }
      String unicode = sb.toString();
      return unicode;
   }

   /**
    * Unicode文字列から元の文字列に変換する ("\u3042" -> "あ")
    * @param unicode
    * @return
    */
   public static String convertToOiginal(String unicode){
      if (unicode==null || unicode.isEmpty()) return "";
      String[] codeStrs = unicode.split("\\\\u");
      int[] codePoints = new int[codeStrs.length - 1]; // 最初が空文字なのでそれを抜かす
      for(int i = 0; i < codePoints.length; i++){
         codePoints[i] = Integer.parseInt(codeStrs[i + 1], 16);
      }
      String encodedText = new String(codePoints, 0, codePoints.length);
      return encodedText;
   }
}

標準出力結果

\u3042\u0061\u0062\u0063\u0041\u0031\u000A
あabcA1