gpt4 book ai didi

python - 等待 NSTask 完成终端命令的执行

转载 作者:行者123 更新时间:2023-11-29 05:56:05 26 4
gpt4 key购买 nike

我正在构建一个 Cocoa 应用程序,它使用 NSTask 来调用 python 脚本。

NSPipe *pipe = [NSPipe pipe];
NSFileHandle *file = pipe.fileHandleForReading;
NSTask *task = [[NSTask alloc] init];

[task setLaunchPath:@"/anaconda3/bin/python"]; // Python path
[task setArguments:@[@"run.py"]]; //My program to be executed on terminal
task.standardOutput = pipe;
task.standardError = pipe;
[task launch];
[task waitUntilExit];

NSData *data = [file readDataToEndOfFile];
[file closeFile];

NSString *output = [[NSString alloc] initWithData: data encoding:NSUTF8StringEncoding];
NSLog (@"output:\n%@", output);

当我尝试运行一个小型 python 程序(例如使用 NSTask 打印 hello world)时,它会被执行。但是,当我尝试通过 NSTask 执行一个需要较长时间(约 40 秒)执行的程序时,它没有执行,并且我无法从终端获取输出字符串。

我应该如何确保我的代码在终端中执行,然后将控制传递给程序中的下一个语句?

最佳答案

您可以在启动任务后添加 NSTask 的 waitUntilExit 方法,该方法会阻塞,或者让任务在后台运行,并在文件管道中使用 NSFileHandle 的 readToEndOfFileInBackgroundAndNotify 并添加一个NSFileHandleReadToEndOfFileCompletionNotification 通知的观察者。

关于python - 等待 NSTask 完成终端命令的执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55143897/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com