问题:
我试图将标准输入/标准输出从UNIX可执行文件连接到MacOS应用程序的用户界面。但是,我似乎无法访问这些值-没有任何显示。
背景:
我已经实现了我能找到的所有解决方案,但没有一个起作用[[1] [2] [3] [4] [{{3} }] [5] [6] [7] [8]。我已经完成了Python 3课程[9],以便可以在可执行文件[1]的python脚本中自定义标准输出。而且,我已经查看并实现了几个工作的MacOS存储库,这些存储库使用标准输出[1] [1] [2]的数据来更新其用户界面。
代码: 3
func runExecutable() {
let desktop = fileManager.urls(for: .desktopDirectory, in: .userDomainMask)[0]
let url = Bundle.main.url(forResource: "youtube_dl_custom", withExtension: "")
let arguments = [
"--format",
"bestvideo[ext=mp4]+bestaudio[ext=m4a]",
"--output",
"\(desktop)/%(title)s.%(ext)s",
"\(videoUrlTextField.stringValue)"
]
process.arguments = arguments
process.executableURL = url
process.standardInput = inputPipe
process.standardOutput = outputPipe
openConsolePipe()
inputPipe.fileHandleForReading.readabilityHandler = {
[weak self] fileHandle in
let data = fileHandle.availableData
self?.buffer.append(data)
if let buffer = self?.buffer,
let string = String(data: buffer, encoding: .utf8),
string.last?.isNewline == true {
self?.buffer.removeAll()
print("## \(string)")
self?.standardOutputTextView.string += string + "\n"
self?.outputPipe.fileHandleForWriting.write(data)
}
}
try? process.run()
closeConsolePipe()
}
func openConsolePipe() {
dup2(STDOUT_FILENO, outputPipe.fileHandleForWriting.fileDescriptor)
dup2(inputPipe.fileHandleForWriting.fileDescriptor, STDOUT_FILENO)
dup2(inputPipe.fileHandleForWriting.fileDescriptor, STDERR_FILENO)
}
func closeConsolePipe() {
freopen("/dev/stdout", "a", stdout)
}
结果:
标准输出似乎会自动打印到控制台,但我似乎无法访问这些值。
其他:
使用youtube-dl
存储库下载视频[Full]。
为youtube-dl
[1]使用了自定义python脚本。
使用pyinstaller [1]将youtube-dl
转换为可执行文件。
将项目发布到GitHub进行故障排除[1]。