终端输出到变量(从 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"
。
显然我对其他想法持开放态度,但据我了解我的主要选择是:
subprocess
call
/Popen
?使用标准输出记录变量
- 编写 java 包的包装器
有没有更好的方法来实现这个?第一种方法似乎不像许多示例那样容易工作,我不知道围绕 java 包编写包装器会有多困难,因为我从未这样做过。
如果您的程序 FileProcessor.jar
没有输出到标准输出的特殊情况,您将无能为力(但写入一个临时文件并再次读取它,但那是作弊:)。
当 -o
选项被省略时,或者当 -o
选项具有 -
值(破折号)时,大多数好的命令(例如 Unix 命令)都会将数据转储到标准输出。
如果你不能修改你的程序,你可以欺骗程序,让它相信它正在写一个文件,而实际上它是在控制台上写的:
Linux/UNIX:
- 使用
tty
命令获取当前 tty
。例如:/dev/pts/2
- 将其传递给您的程序
- 读取标准输出
Windows:
- 使用
CON
作为输出文件名
- 读取标准输出
我想知道要将 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"
。
显然我对其他想法持开放态度,但据我了解我的主要选择是:
subprocess
call
/Popen
?使用标准输出记录变量- 编写 java 包的包装器
有没有更好的方法来实现这个?第一种方法似乎不像许多示例那样容易工作,我不知道围绕 java 包编写包装器会有多困难,因为我从未这样做过。
如果您的程序 FileProcessor.jar
没有输出到标准输出的特殊情况,您将无能为力(但写入一个临时文件并再次读取它,但那是作弊:)。
当 -o
选项被省略时,或者当 -o
选项具有 -
值(破折号)时,大多数好的命令(例如 Unix 命令)都会将数据转储到标准输出。
如果你不能修改你的程序,你可以欺骗程序,让它相信它正在写一个文件,而实际上它是在控制台上写的:
Linux/UNIX:
- 使用
tty
命令获取当前tty
。例如:/dev/pts/2
- 将其传递给您的程序
- 读取标准输出
- 使用
Windows:
- 使用
CON
作为输出文件名 - 读取标准输出
- 使用