- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 NSTask 运行 UNIX 'apropos' 命令。这是我的代码:
NSTask *apropos = [[NSTask alloc] init];
NSPipe *pipe = [[NSPipe alloc] init];
[apropos setLaunchPath:@"/usr/bin/apropos"];
[apropos setArguments:[NSArray arrayWithObjects:@"filename", @"match", nil]];
[apropos setStandardOutput:pipe];
[apropos launch];
[apropos waitUntilExit];
问题是这永远不会返回。我还尝试使用 Apple 的示例代码 (TaskWrapper),它返回输出(分三段),但它从未调用 processFinished 处理程序。
此外,appendOutput: 处理程序接收重复项。因此,例如,如果 apropos 返回:
12345
我可能会收到这样的东西:
123
1234
5
(分为 3 条附加消息)。
我注意到 Apropos 以一种可以在命令行中上下滚动的格式显示输出,而不是直接将数据直接输出到标准输出;如何通过 NSTask 和 NSPipe 可靠地读取此内容?
最佳答案
我刚刚测试了这个程序,它运行良好:程序终止,并且 /tmp/apropos.txt
包含 apropos
的输出。
#import <Foundation/Foundation.h>
int main()
{
NSAutoreleasePool *pool = [NSAutoreleasePool new];
NSTask *apropos = [[[NSTask alloc] init] autorelease];
NSPipe *pipe = [[[NSPipe alloc] init] autorelease];
NSFileHandle *readHandle = [pipe fileHandleForReading];
[apropos setLaunchPath:@"/usr/bin/apropos"];
[apropos setArguments:[NSArray arrayWithObjects:@"filename", @"match", nil]];
[apropos setStandardOutput:pipe];
[apropos launch];
[apropos waitUntilExit];
NSString *output = [[[NSString alloc]
initWithData:[readHandle readDataToEndOfFile]
encoding:NSUTF8StringEncoding] autorelease];
[output writeToFile:@"/tmp/apropos.txt" atomically:YES
encoding:NSUTF8StringEncoding error:NULL];
[pool drain];
return 0;
}
您是否有机会使用NSLog()
来检查输出?如果是这样,您可能需要为 stdin
设置管道,如下所述 in this answer of mine to an NSTask related question 。看来 NSLog()
向 stderr
发送数据会影响 NSTask
。
关于cocoa - NSTask 不会终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4765559/
我正在尝试在存档之前将 Mac 的地址簿复制到保存位置。这是我的代码: // whoami let whoam : NSTask = NSTask()
我正在将 ASIHTTPRequest 集成到我的应用程序中,并包含一些在 XCode 中找到的受支持的框架,但在此 API 的一个文件中,我在此声明中收到错误“NSTask 未声明”...NSTas
昨天我read somewhere that NSTask isn't thread safe这让我很困扰,因为我在 NSThread 中运行 NSTask,并且到目前为止还没有遇到任何线程问题。 我
我有一个可以通过此终端命令导入 XML 文件的应用程序: open /path/to/main\ app.app --args myXML.xml 这非常有效,没有任何问题。我已经使用 Applesc
我正在尝试学习以任务进程可以接受输入文件重定向作为参数的方式编写NSTask。在传统的 unix system() 命令中,这对代码来说是微不足道的,但对于我的应用程序的需求来说,其可控性还远远不够。
我正在尝试使用 NSTask 运行 UNIX 'apropos' 命令。这是我的代码: NSTask *apropos = [[NSTask alloc] init]; NSPipe *pipe =
我正在使用 NSTask 来获取/usr/bin/man 的输出。我得到了输出,但没有格式化(粗体、下划线)。应该看起来像这样: 粗体带有下划线的文本 (请注意,斜体文本实际上带有下划线,只是此处没有
假设一个基于 Cocoa 的沙盒应用程序生成了一个 SSH 实例。到目前为止一切顺利,SSH 进程正在启动。 问题是,如何允许子进程读取文件(例如 ~/.ssh/config 或 ~/.ssh/kno
此代码用于获取进程的标准输出 NSTask * task; NSPipe * pipe; NSFileHandle * fileHandle;
我在执行不同的 NSTask 时遇到问题。相同的launchPath,不同的参数。我有一个类,其实例管理自己的 NSTask 对象,并根据参数初始化这些实例 - 正在创建依赖的 NSTask 对象。我
我收到了一份来自 NSTask 的 -launch 崩溃现场的报告。 有问题的代码是: NSTask *task = [[NSTask alloc] init]; [task setLaunchPat
我正在编写一个任务来访问 OpenSSL 二进制文件。如果我复制/粘贴不带单引号的命令,那么它在终端中可以完美运行。 我不断将引用粘贴到命令中。这是代码/错误... let keySizeValue
在 NSTask 的源代码中,我在 waitUntilExit 方法中发现了一个有趣的地方: - (void) waitUntilExit { NSTimer *timer = nil;
我正在使用 NStask 来获取文件夹大小。它对于普通文件路径(如 home/ABC/Users/testUser/Documents)工作正常。但它没有显示 home/ABC/Users/testU
OS X 10.6.8、Carbon、C++ 应用。 我想从 shell 运行命令并以字符串形式返回结果,然后用作另一个函数的参数。 df/|尾-n +2 | awk '{ print $1 }' 但
我使用 NSTask 和 setStandardOutput 将命令行工具的标准输出重定向到我的程序,以便我可以使用它进行处理。这很好用,但作为一个副作用,当我运行程序时,工具的输出显示为输出。我想完
我正在尝试使用 NSTask 将二进制 plist 转换为 xml,尽管遇到了一个我不太理解的错误。如果我将命令 NSTask 失败并将其复制到命令行,它就可以正常工作。希望有人能告诉我出了什么问题。
我需要使用 NSTask 按顺序运行多个命令,并且想知道什么是判断任务是否已完成的好方法,以便我可以继续执行下一个命令。我正在使用“sox”(我将其包含在我的应用程序包中)使用输入音频文件创建临时音频
这个问题已经有答案了: NSTask NSPipe - objective c command line help (2 个回答) 已关闭2 年前。 我使用 NSTask 如下: NSTask
我正在使用 NSTask 在 Cocoa 中执行可执行文件。可执行文件正在创建文件。 有什么方法可以找出该可执行文件在执行过程中创建了哪些文件? 谢谢。 最佳答案 Instruments 中有一个工具
我是一名优秀的程序员,十分优秀!