在 Swift 中收集 python 输出
Collect python output in Swift
是否可以将 .py 文件的输出存储在 swift 变量中?
在我的 xcode 项目中,我放置了一个 python 脚本。
我运行这个脚本使用这个代码
class ViewController: NSViewController {
var pathForFile = Bundle.main.path(forResource: "eject", ofType: "py")
let path = "/usr/bin/python/"
override func viewDidLoad() {
let arguments = [pathForFile]
let task = Process.launchedProcess(launchPath: path, arguments: arguments as! [String])
task.waitUntilExit()
super.viewDidLoad()
}
}
如果我将 print(x)
放入 python 文件中,执行后我可以在 xcode.
的输出 window 上看到 x 值我还尝试将 return x
放在 main 函数中,然后尝试在 swift 文件中设置 let y = task.waitUntilExit()
,但我得到的唯一结果是一个空变量
我对swift了解不多,请见谅。提前致谢!
解决方案
如本页所述
https://www.hackingwithswift.com/example-code/system/how-to-run-an-external-program-using-process
并在 Willeke 建议的答案中显示,您可以使用 Pipe()
来做到这一点。
我更改了代码,如下所示。
override func viewDidLoad() {
super.viewDidLoad()
let task = Process()
task.executableURL = URL(fileURLWithPath: "/usr/bin/python")
let filename = Bundle.main.path(forResource: "eject", ofType: "py")
task.arguments = [filename!]
let outputPipe = Pipe()
task.standardOutput = outputPipe
do{
try task.run()
} catch {
print("error")
}
let outputData = outputPipe.fileHandleForReading.readDataToEndOfFile()
let output = String(decoding: outputData, as: UTF8.self)
print(output)
}
一定要放这个
let outputPipe = Pipe()
task.standardOutput = outputPipe
在 task.run()
命令和这个
之前
let outputData = outputPipe.fileHandleForReading.readDataToEndOfFile()
let output = String(decoding: outputData, as: UTF8.self)
print(output)
之后。
是否可以将 .py 文件的输出存储在 swift 变量中? 在我的 xcode 项目中,我放置了一个 python 脚本。 我运行这个脚本使用这个代码
class ViewController: NSViewController {
var pathForFile = Bundle.main.path(forResource: "eject", ofType: "py")
let path = "/usr/bin/python/"
override func viewDidLoad() {
let arguments = [pathForFile]
let task = Process.launchedProcess(launchPath: path, arguments: arguments as! [String])
task.waitUntilExit()
super.viewDidLoad()
}
}
如果我将 print(x)
放入 python 文件中,执行后我可以在 xcode.
的输出 window 上看到 x 值我还尝试将 return x
放在 main 函数中,然后尝试在 swift 文件中设置 let y = task.waitUntilExit()
,但我得到的唯一结果是一个空变量
我对swift了解不多,请见谅。提前致谢!
解决方案
如本页所述
https://www.hackingwithswift.com/example-code/system/how-to-run-an-external-program-using-process
并在 Willeke 建议的答案中显示,您可以使用 Pipe()
来做到这一点。
我更改了代码,如下所示。
override func viewDidLoad() {
super.viewDidLoad()
let task = Process()
task.executableURL = URL(fileURLWithPath: "/usr/bin/python")
let filename = Bundle.main.path(forResource: "eject", ofType: "py")
task.arguments = [filename!]
let outputPipe = Pipe()
task.standardOutput = outputPipe
do{
try task.run()
} catch {
print("error")
}
let outputData = outputPipe.fileHandleForReading.readDataToEndOfFile()
let output = String(decoding: outputData, as: UTF8.self)
print(output)
}
一定要放这个
let outputPipe = Pipe()
task.standardOutput = outputPipe
在 task.run()
命令和这个
let outputData = outputPipe.fileHandleForReading.readDataToEndOfFile()
let output = String(decoding: outputData, as: UTF8.self)
print(output)
之后。