问题标签 [nspipe]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
3354 浏览

objective-c - 具有多个管道输入的 NSTask

我正在尝试使用管道来处理需要多个输入的命令,但不太确定该怎么做。这是我正在尝试做的一个片段。我知道如何处理第一个输入,但我对第二个输入中的管道感到迷茫-newstdinpass

所以我知道hdiutil以这种方式使用有点麻烦,但就管道而言,我是否以正确的方式进行操作?

谢谢。

更新:如果其他人对此感到疑惑,我的问题的一个快速解决方案是传递一个以 null 结尾的字符串,正如 Ken Thomases 在下面指出的那样。[[NSString stringWithFormat:@"oldpass\0newpass\0"] dataUsingEncoding:NSUTF8StringEncoding]入管使用。现在,仍然需要学习如何NSTasks用管道桥接多个......

0 投票
1 回答
87 浏览

objective-c - 任务终止后接收数据?

我正在使用NSTaskandNSPipe执行命令并异步获取其输出。

我使用的代码与我的问题几乎 100% 相同(包括修复程序)。

但是,当我测试它时,我注意到有时NSTaskDidTerminateNotification在最后一个NSFileHandleReadCompletionNotification.

换句话说,看似已死的任务是在终止后向我发送数据。

怎么了?有任何想法吗?

0 投票
1 回答
696 浏览

objective-c - Objective-c:如何使用 NSPipe 在 NSTask 中输出非法命令 echo?

我有如下代码,没关系,但我有两个问题。

1) 如果我为sh分配了一些非法参数,例如 @"ls - l",那么outString为空。也就是说,它无法捕获错误警告“ls: -: No such file or directory ls: l: No such file or directory”。我该如何处理?

2)如何实现这个功能:假设app的当前目录是"/user/Doc",我执行sh = @"cd /",那么我执行sh = @"ls -l"可以看到下面的内容下一个循环中的“/”目录。但是当新循环开始时,当前目录恢复到“/user/Doc”。我怎样才能保持上一个循环的任务环境?

此外,我可以像直接在终端上工作一样,继续运行“/bin/sh”吗?

0 投票
1 回答
408 浏览

objective-c - 使用 NSTask 执行 shell 命令时通过 NSPipe 输出的奇怪问题

这是我的代码。当我设置myCmd=@"cd /\nls -l\n"ormyCmd=@"ls -l\n"时,没问题。但是,当我设置时myCmd=@"cd /\n",程序已死在行中if ((output =[[outPipe fileHandleForReading] availableData]) && [output length]),并且没有任何调试信息输出。

我不知道"cd /"cmd 是否与其他 shell 命令不同。你能给我一些建议吗?

0 投票
1 回答
762 浏览

objective-c - Clang NSTask 与流

别介意所有的“为什么?”,“没用?”和“不要打扰”的评论。我想使用 clang 在另一个程序中编译一个程序。我可以创建NSTask并设置参数,如果文件存在(即没有流),它将工作,并写入物理文件。我无法得到我真正想要的,即使用流进行输入和输出。我知道如果您使用 -xc 和 - 选项,clang 和 gcc 都允许编译标准输入,但无法使用管道实现该功能。我也不确定如何将 clang 的输出重定向到文件句柄或流。

这是我编译它并在 outfile 中生成正确输出的代码

我尝试将其用于输入流:

有时,我假设当管道关闭而 NSTask 仍然存在时,输出文件被创建并运行。这让我觉得 clang 只是在等待 stdin 关闭。读取数据后有没有办法关闭管道?

对于输出,我尝试使用 NSPipe 的 fileHandleForWriting 作为 -o 的参数,这给出了[NSConcretePipe fileSystemRepresentation]无法识别的选择器的错误。我尝试使用 stdout 的文件描述符创建一个文件句柄,以解决相同的错误。我不知道任何重定向它的命令行参数。我尝试使用|重定向但无法使其正常工作。如果有任何 unix 魔法可以重定向它,我可以将 stdout 复制到我想要的任何地方。

那么有没有办法在读取所有数据时关闭管道?和重定向铿锵声输出?如果有任何其他方法可以更轻松或更清洁地完成相同的事情,我愿意接受任何实施。对这两个项目的任何帮助都会非常棒。

0 投票
0 回答
263 浏览

objective-c - NSTask 在 Xcode 4.3.3 之外不接收标准输出

这是我的第一篇文章,所以让我非常感谢外面的所有发帖人(我被动地广泛使用 - 太棒了!)

我正在使用旧的 Quicktime API 为 Mac OS X 开发视频导出工具。

简介:我从多个输入电影中剪切帧并将它们排列(缩放)到一个新的输出电影(一种媒体亭)。

由于许多需要的 QT 功能(例如编写时间码...)需要嵌套在 32 位应用程序中,我决定使用 32 位命令行工具离线执行此操作。该工具逐帧渲染(离线)并以 0.0 和 1.0 之间的值打印当前进度

它由主应用程序(Cocoa、GUI、现代的东西)通过 NSTask 调用。黑啤酒被 NSPipe 捕获。

我查看了一些示例,并将快速概述我的代码:

现在的问题:

在 Xcode 中启动应用程序时(通过“运行”),一切正常。调用正确完成,该过程在活动监视器中可见,并且 NSLevelIndicator(在创新应用程序的人上)根据(浮动)进度变量进行得很好。

但是:如果我“归档”应用程序并在 Xcode 之外执行它,我的命令行工具的标准输出似乎永远不会到达应用程序。我试着写一个调试文件

没有机会,它永远不会被调用!我在几台Mac上测试了这个问题,同样的问题......

我是否犯了明显的错误,或者是否有一些偏好配置(沙盒已关闭),可能是我忽略的已知问题?

谢谢你的帮助

问候垫

0 投票
1 回答
532 浏览

objective-c - 有人可以帮我发现这个 NSPipe/NSFileHandle 代码中的漏洞吗?

所以我遇到了这个问题,一旦这个 NSFileHandle/NSPipe 被触发......我的 CPU 使用和内存开始变得疯狂。问题是我发现很难找到这个泄漏。任何建议或帮助表示赞赏。干杯。

。H

.m

0 投票
1 回答
6524 浏览

objective-c - 如何在一致的环境中循环使用 NSTask 运行终端命令?

我想使用 NSTask 来模拟终端运行命令。代码如下。它可以循环获取输入并返回过程输出。

我的问题是:当一个循环结束时,运行环境恢复到初始化状态。比如默认运行路径是/Users/apple,我运行cd /把路径改成/,再运行pwd,它返回的是 ,/Users/apple而不是/.

那么我怎样才能NSTask完全模拟终端呢?

0 投票
2 回答
3903 浏览

objective-c - NSTask/NSPipe 从 Unix 命令读取

我正在编写一个 Cocoa 应用程序,它需要执行 UNIX 程序并在生成时逐行读取其输出。我这样设置了 NSTask 和 NSPipe:

该命令不会终止,直到程序告诉它使用[task terminate]. 我尝试了几种从句柄读取的方法,例如-readInBackgroundAndNotifywhile([(data = [handle availableData]) length] > 0)-waitForDataInBackgroundAndNotify,但管道似乎从未产生任何数据。有什么方法可以“戳”NSTaskNSPipe刷新数据吗?

编辑:与-readInBackgroundAndNotify

-waitForDataInBackgroundAndNotify

while循环:

编辑2:参数设置如下(命令为tshark):

0 投票
2 回答
1369 浏览

objective-c - 使用 NSTask 和 NSPipe 会导致 100% 的 CPU 使用率

我正在尝试使用 NSTask 运行一个简单的 bash 脚本并将输出定向到文本视图。执行任务后,我的应用程序的 CPU 使用率为 100%,即使它很简单echo(目前)。

我创建了一个全新的项目来隔离问题:

它被正确执行并且输出(作为一个NSData)被记录为NSLog

但是,在我终止我的应用程序之前,CPU 使用率保持在 100%。

编辑:

Time Profiler 测试返回下面的列表,但我不确定如何解释。

在此处输入图像描述