[英]Swift pass commands into a jar file
我的Swift程序在后台运行了一个Java程序。 Java程序可以在命令行中读取用户输入。 启动jar后,如何将“命令”或文本行传递到jar中?
就像下面的程序从Java程序中读取的方式一样,我该如何“回复”呢?
let b = Bundle.main
let path = b.path(forResource: "myjar", ofType: "jar")!
NSLog("%@", "jar path : \(path)")
task.launchPath = "/usr/bin/java"
task.arguments = ["-jar", path]
let pipe = Pipe()
task.standardOutput = pipe
let errorPipe = Pipe()
task.standardError = errorPipe
task.launch()
let outHandle = pipe.fileHandleForReading
outHandle.waitForDataInBackgroundAndNotify()
var progressObserver : NSObjectProtocol!
progressObserver = NotificationCenter.default.addObserver(
forName: NSNotification.Name.NSFileHandleDataAvailable,
object: outHandle, queue: nil){
notification -> Void in
let data = outHandle.availableData
if data.count > 0 {
if let str = String(data: data, encoding: String.Encoding.utf8) {
NSLog("%@", str)
}
outHandle.waitForDataInBackgroundAndNotify()
} else { NotificationCenter.default.removeObserver(progressObserver)
}
}
然后我没有运气就尝试了以下方法:
pipe.fileHandleForWriting.write("text to send to java program".data(using: String.Encoding.utf8)
你很亲密 如果您只是添加了代码pipe.fileHandleForWriting.write("text to send to java program"...
,那将不起作用,因为该管道是您分配给standardOutput
那个管道。
您需要创建另一个Pipe
对象,将其分配给standardInput
,然后写入:
...
>> let inputPipe = Pipe()
>> task.standardInput = inputPipe
task.launch()
>> inputPipe.fileHandleForWriting.write("text to send to java program".data(using: String.Encoding.utf8)
...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.