问题标签 [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.
objective-c - 具有多个管道输入的 NSTask
我正在尝试使用管道来处理需要多个输入的命令,但不太确定该怎么做。这是我正在尝试做的一个片段。我知道如何处理第一个输入,但我对第二个输入中的管道感到迷茫-newstdinpass
所以我知道hdiutil
以这种方式使用有点麻烦,但就管道而言,我是否以正确的方式进行操作?
谢谢。
更新:如果其他人对此感到疑惑,我的问题的一个快速解决方案是传递一个以 null 结尾的字符串,正如 Ken Thomases 在下面指出的那样。[[NSString stringWithFormat:@"oldpass\0newpass\0"] dataUsingEncoding:NSUTF8StringEncoding]
入管使用。现在,仍然需要学习如何NSTasks
用管道桥接多个......
objective-c - 任务终止后接收数据?
我正在使用NSTask
andNSPipe
执行命令并异步获取其输出。
我使用的代码与我的问题几乎 100% 相同(包括修复程序)。
但是,当我测试它时,我注意到有时,NSTaskDidTerminateNotification
在最后一个NSFileHandleReadCompletionNotification
.
换句话说,看似已死的任务是在终止后向我发送数据。
怎么了?有任何想法吗?
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”吗?
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 命令不同。你能给我一些建议吗?
objective-c - Clang NSTask 与流
别介意所有的“为什么?”,“没用?”和“不要打扰”的评论。我想使用 clang 在另一个程序中编译一个程序。我可以创建NSTask
并设置参数,如果文件存在(即没有流),它将工作,并写入物理文件。我无法得到我真正想要的,即使用流进行输入和输出。我知道如果您使用 -xc 和 - 选项,clang 和 gcc 都允许编译标准输入,但无法使用管道实现该功能。我也不确定如何将 clang 的输出重定向到文件句柄或流。
这是我编译它并在 outfile 中生成正确输出的代码
我尝试将其用于输入流:
有时,我假设当管道关闭而 NSTask 仍然存在时,输出文件被创建并运行。这让我觉得 clang 只是在等待 stdin 关闭。读取数据后有没有办法关闭管道?
对于输出,我尝试使用 NSPipe 的 fileHandleForWriting 作为 -o 的参数,这给出了[NSConcretePipe fileSystemRepresentation]
无法识别的选择器的错误。我尝试使用 stdout 的文件描述符创建一个文件句柄,以解决相同的错误。我不知道任何重定向它的命令行参数。我尝试使用|
重定向但无法使其正常工作。如果有任何 unix 魔法可以重定向它,我可以将 stdout 复制到我想要的任何地方。
那么有没有办法在读取所有数据时关闭管道?和重定向铿锵声输出?如果有任何其他方法可以更轻松或更清洁地完成相同的事情,我愿意接受任何实施。对这两个项目的任何帮助都会非常棒。
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上测试了这个问题,同样的问题......
我是否犯了明显的错误,或者是否有一些偏好配置(沙盒已关闭),可能是我忽略的已知问题?
谢谢你的帮助
问候垫
objective-c - 有人可以帮我发现这个 NSPipe/NSFileHandle 代码中的漏洞吗?
所以我遇到了这个问题,一旦这个 NSFileHandle/NSPipe 被触发......我的 CPU 使用和内存开始变得疯狂。问题是我发现很难找到这个泄漏。任何建议或帮助表示赞赏。干杯。
。H
.m
objective-c - 如何在一致的环境中循环使用 NSTask 运行终端命令?
我想使用 NSTask 来模拟终端运行命令。代码如下。它可以循环获取输入并返回过程输出。
我的问题是:当一个循环结束时,运行环境恢复到初始化状态。比如默认运行路径是/Users/apple
,我运行cd /
把路径改成/
,再运行pwd
,它返回的是 ,/Users/apple
而不是/
.
那么我怎样才能NSTask
完全模拟终端呢?
objective-c - NSTask/NSPipe 从 Unix 命令读取
我正在编写一个 Cocoa 应用程序,它需要执行 UNIX 程序并在生成时逐行读取其输出。我这样设置了 NSTask 和 NSPipe:
该命令不会终止,直到程序告诉它使用[task terminate]
. 我尝试了几种从句柄读取的方法,例如-readInBackgroundAndNotify
、while([(data = [handle availableData]) length] > 0)
和-waitForDataInBackgroundAndNotify
,但管道似乎从未产生任何数据。有什么方法可以“戳”NSTask
或NSPipe
刷新数据吗?
编辑:与-readInBackgroundAndNotify
:
与-waitForDataInBackgroundAndNotify
:
带while
循环:
编辑2:参数设置如下(命令为tshark
):
objective-c - 使用 NSTask 和 NSPipe 会导致 100% 的 CPU 使用率
我正在尝试使用 NSTask 运行一个简单的 bash 脚本并将输出定向到文本视图。执行任务后,我的应用程序的 CPU 使用率为 100%,即使它很简单echo
(目前)。
我创建了一个全新的项目来隔离问题:
它被正确执行并且输出(作为一个NSData
)被记录为NSLog
:
但是,在我终止我的应用程序之前,CPU 使用率保持在 100%。
编辑:
Time Profiler 测试返回下面的列表,但我不确定如何解释。