问题标签 [nstask]

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 回答
1056 浏览

cocoa - 从命令行压缩 - 如何修剪路径元素

我正在使用 NSTask 从我的应用程序中执行 zip 命令。它作为参数传递一些指向要压缩的文件/文件夹的路径。

问题是,如果没有 -j 选项,最终的 zip 最终会在 zip 中出现荒谬的文件路径,(如 "/private/var/folders/A5/A5CusLQaEo4mop-reb-SYE+++TI/-Tmp-/9101A216- 5A6A-4CD6-A477-E4B86E007476-51228-00014BCB9514323F/myfile.rtf")。但是,如果我添加 -j 选项,那么如果嵌套文件夹深处的任何文件具有

我尝试在执行 NSTask 之前设置路径:

希望 zip 的文档说的是实话:

默认情况下, zip 将存储完整路径(相对于当前目录

但这并没有按预期工作。调整 -j 和 -p 和 -r 的设置只会以不同的组合产生上述问题。

问题:

如何获取一组目录,例如

  • /some/long/path/sub1/file1.txt
  • /some/long/path/sub2/file1.txt

并将它们压缩成一个内容为

  • /sub1/file1.txt
  • /sub2/file1.txt

感谢您对 zip 的细微之处提供任何建议。

- - -编辑

我忘记添加的另一件事是传递的原始目录是“路径”,因此在我看来,期望的结果也是预期的结果。

0 投票
4 回答
14176 浏览

stdout - PHP CLI 不使用标准错误输出错误

我正在通过 MacOS 中的 NSTask 运行 PHP CLI,但这个问题更多的是关于 CLI 本身。

我正在听stderr管道,但无论我尝试运行什么文件,那里都没有输出:

  • 如果文件类型不是纯文本,则stdout设置为?.
  • 如果文件是一个有错误的 php 脚本,错误消息仍然会打印到stdout.

是否有切换到解释器来处理错误stderr?除了解析之外,我是否可以选择检测错误stdout

0 投票
1 回答
1248 浏览

objective-c - NSTask 字符输出到 NSTextField 无缓冲作为连续流

我想要完成的是启动命令行(CL)任务(包装的NSTask)并通过我的UI中的NSTextField标签实时传输(NSPipe)字符输出作为字符流。文本字段的目的不是以任何方式捕获输出,甚至不允许读取它。它只是为了显示它,一部分是作为 UI 装饰,一部分是作为一种进度指示器。我希望用户在 CL 任务完成工作时看到(快速)流过的字符流。

我知道如何将 CL 任务包装在 NSTask 中并通过设置 [task setStandardOutput:outputPipe] 来获取其输出,然后使用 NSFileHandle 从该输出中读取。而且我想我知道如何使用 NSFileHandle 读取方法之一以“硬”方式执行我想要的操作,并将输出同步切割成块并在文本字段中一个接一个地显示这些块。但我希望可能有一些我没有想到的轻量级方式来将原始 ascii 字符从标准输出实时发送到文本字段中。

有人有想法吗?

编辑:这是一些基于@Peter Hosey 回答的工作代码。它正在做我想做的事,但我不知道我是否彻底理解了彼得的概念,或者我在这里做了什么不正常的事情,所以请随时发表评论。再次感谢彼得!

关于此代码的注释:

1) 将 init 中的 scheduledTimerWithTimeInterval 从 .001 更改为 .005 是文本滚动效果的一个有趣的视觉范围。

2) 我正在使用的标签只是在界面生成器中的 UI 上创建的简单文本标签。出于我的目的,我不需要使用正确的对齐属性字符串来完成彼得回答的第二部分。我只是在界面生成器中设置了文本标签的理由。

0 投票
1 回答
1216 浏览

iphone - 我可以在 iPhone 上为我不分发的应用程序使用 NSTask 吗?

我无法找到有关它的太多信息,但我看到了一些提示,可以在 iPhone 应用程序中使用 NSTask。如果可能,我将如何去做?

我不想越狱我的 iPhone,但我正在开发的应用程序仅供内部使用;它不会被分发,所以我不在乎 Apple 是否拒绝使用 NSTask 的应用程序。

更新:我继续尝试,通过将头文件 NSTask.h 复制到我的项目中,我能够成功编译代码。目前很好。但是,当我运行代码时,事情并没有那么顺利。我可以创建一个任务,并调用它的 setLaunchPath 方法,但是当我尝试启动它时,我得到一个“启动路径不可访问”错误。不过,启动路径应该没问题,因为我尝试启动的进程是我通过套接字复制的程序,并且我使用的路径与我用来编写文件的路径相同,因为我用于启动路径任务。这是否表明 iOS 文件系统阻止我访问文件以启动它,即使我可以访问该位置来打开和写入文件?还是更有可能我在某个地方犯了另一个错误?

0 投票
1 回答
1076 浏览

objective-c - 在后台执行 NSTask

我正在使用 NSTask 执行一个 shell 脚本,但问题是 shell 脚本是那些在你按下 control+c 之前一直运行的脚本之一。它启动得很好,但是我的 mac 应用程序只是等待它结束。我怎样才能使它从mac应用程序中分离任务并在后台运行它。

0 投票
1 回答
575 浏览

objective-c - 如何通过 NSTask 运行“Purge”命令?

我正在制作一个免费的 Mac 应用程序,它只是可以在终端中运行的“清除”命令的包装。我厌倦了充斥 Mac App Store 的盗版,我只想帮助人们。我已经完成了 GUI 我只是不知道如何成功运行命令。

我知道我需要使用NSTask,但我可能没有正确使用它。

我怎样才能解决这个问题?

0 投票
1 回答
2110 浏览

objective-c - 使用 NSTask 运行终端命令

我想在我的程序中运行终端命令。该命令如下所示:

它适用,system()但当我使用NSTask.

工作正常,但

没有。输出:

有人有想法吗?

0 投票
2 回答
6116 浏览

macos - NSTask 的实时输出

我有一个包含多个sleep()命令的 PHP 脚本。我想在我的应用程序中使用NSTask. 我的脚本如下所示:

我可以使用通知异步执行我的任务:

我的输出是(当然是 2 秒后):


我的问题是:如何在打印后立即获得这三个单词?

0 投票
2 回答
2231 浏览

cocoa - NSTask:进程的启动路径是否存在

此代码用于获取进程的标准输出

由于/usr/bin/lspci在某些系统上不存在,因此会发生此致命错误

由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“启动路径不可访问”

如何事先检查lspci确实存在,如果不存在则向用户显示错误消息?

0 投票
1 回答
868 浏览

php - 无法将命令行参数传递给运行 PHP CLI 的 NSTask

编辑:[已解决]见下文。

我正在启动 PHP,NSTask并尝试将一些命令行选项传递给它:

当我从 Objective-C 运行它时,我总是得到以下 PHP 错误:

对于:
@"-r 'echo 123;'"
@"-r \'echo 123;\'"
@"-r \"echo 123;\""
Parse error: syntax error, unexpected $end in Command line code on line 1

对于:
@"-r 'echo \'hello\';'" Parse error: syntax error, unexpected T_STRING in Command line code on line 1

对于:
@"--run 'echo 123;'"
Usage: php [options] ...

应该注意的是,当从 Objective-C 调用时,PHP 解释器会报告所有错误,但是当我在命令行上尝试完全相同的选项字符串时,它会按预期工作。

这里有什么问题?我应该如何编写要正确传递给 NSTask 的参数?

PS:我真正的目标是执行一些include()行而不是回显,这也不起作用,而是我得到一个意外的封装字符串的错误。