我想知道kotlin本机中是否存在一种通过posix调用命令并接收其终端输出的方法。例如,我想使“ git diff”命令正常工作,而不必创建一个临时文件,将输出写入该文件,然后从该文件中读取。
在SO上,我仅找到需要ProcessBuilder的解决方案,由于它是Java库,因此在kotlin-native上不可用。
我找到了想要使用的一段代码,因此将其发布在这里,供将来的观众使用!
fun executeCommand(command: String): String{ val fp: CPointer? = popen(command, "r") val buffer = ByteArray(4096) val returnString = StringBuilder() /* Open the command for reading. */ if (fp == NULL) { printf("Failed to run command\n" ) exit(1) } /* Read the output a line at a time - output it. */ var scan = fgets(buffer.refTo(0), buffer.size, fp) if(scan != null) { while (scan != NULL) { returnString.append(scan!!.toKString()) scan = fgets(buffer.refTo(0), buffer.size, fp) } } /* close */ pclose(fp) return returnString.trim().toString() }