终端输出到变量(从 java 到 python)- 将输出放入 RAM 而不是写入文件的最佳编码实践

terminal output to variable (from java to python) - Best coding practices for placing output into RAM instead of writing files

我想知道要将 java“.jar”文件输出到 python 变量中,最好的做法是什么。
例如,假设用户有一个复杂的 java 包(也许用户没有写也不理解),他们可以 运行 在命令 window / 终端中使用

java -jar FileProcessor.jar -i "input.txt" -o "output.txt"

有没有办法在python中调用这个并在变量中获取"output.txt",类似于这个方法:

proc = subprocess.Popen(['java', '-jar', 'FileProcessor.jar', '-i', 'sample.txt', '-o'], stdout=subprocess.PIPE)
py_out = proc.stdout.read()
print(py_out)

问题显然是 java 文件在 -o 之后查找输出文件 "output.txt"

显然我对其他想法持开放态度,但据我了解我的主要选择是:

  1. subprocesscall/Popen?使用标准输出记录变量
  2. 编写 java 包的包装器

有没有更好的方法来实现这个?第一种方法似乎不像许多示例那样容易工作,我不知道围绕 java 包编写包装器会有多困难,因为我从未这样做过。

如果您的程序 FileProcessor.jar 没有输出到标准输出的特殊情况,您将无能为力(但写入一个临时文件并再次读取它,但那是作弊:)。

-o 选项被省略时,或者当 -o 选项具有 - 值(破折号)时,大多数好的命令(例如 Unix 命令)都会将数据转储到标准输出。

如果你不能修改你的程序,你可以欺骗程序,让它相信它正在写一个文件,而实际上它是在控制台上写的:

  1. Linux/UNIX:

    • 使用 tty 命令获取当前 tty。例如:/dev/pts/2
    • 将其传递给您的程序
    • 读取标准输出
  2. Windows:

    • 使用CON作为输出文件名
    • 读取标准输出