Перенаправить вывод print () в строку вместо stdout - PullRequest
0 голосов
/ 11 июня 2019

Я пытаюсь перенаправить стандартный вывод функции print () объекта в строковую переменную.

Для этого я использую следующий импорт Java (в Kotlin):

import java.io.PipedOutputStream
import java.io.PipedInputStream
import java.io.PrintStream

И следующая функция:

fun index(): String {

        val df_out = DataFrame.fromJson("https://jsonplaceholder.typicode.com/posts")
        val pipeOut = PipedOutputStream()
        val pipeIn = PipedInputStream(pipeOut)
        System.setOut(PrintStream(pipeOut));
        df_out.print(maxRows = 10)
        val dfAsStr = pipeIn.bufferedReader().use { it.readText() }
        return dfAsStr
    }

Идея состоит в том, чтобы записать выходные данные метода print() в PipedInputStream, чтобы иметь возможность возвращать его как (обработанную) строку.

Этот код функции не заканчивается.

1 Ответ

1 голос
/ 11 июня 2019

Вы можете попробовать это. Если я правильно понял ваш вопрос.

fun index(): String {
    val df_out = DataFrame.fromJson("https://jsonplaceholder.typicode.com/posts")
    val outStream = ByteArrayOutputStream().apply { System.setOut(PrintStream(df_out)) }
    df_out.print(maxRows = 10)
    return outStream.toString()
}
...