【问题标题】:iPhone app: get shell command outputiPhone 应用程序:获取 shell 命令输出
【发布时间】:2013-03-28 17:37:30
【问题描述】:

我正在尝试为 iPhone(或 iPad,就此而言)构建一个应用程序,我想在其中运行一些 shell 命令。我希望它工作的 iPhone 没有越狱。

system() 命令似乎在执行 shell 命令时起作用,但是输出和输入当然仍然是个问题。我了解到NSTask 可用于此类事情并且它存在,尽管没有记录。 (包括 Mac NSTask.h 似乎可以完美运行)

现在的问题是在执行这段代码时:

NSTask *task;
task=[[NSTask alloc] init];
task.launchPath=@"/usr/bin/ls";
task.arguments=[NSArray array];
NSPipe *pipe=[NSPipe pipe];
task.standardOutput=pipe;
task.standardError=pipe;
NSFileHandle *output=pipe.fileHandleForReading;
pipe=[NSPipe pipe];
task.standardInput=pipe;
[task launch];

其中pipe 用于将来的 I/O,它会生成错误读数:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'launch path not accessible'

我已经为 unix bin 目录尝试了很多可能的路径,但要么我找不到它,要么我的应用程序没有列出文件的权限。 -.-

如何在 iPhone 上执行 shell 命令,同时控制该命令的输入和输出?

【问题讨论】:

  • 如果它没有越狱,那么它就不会工作。此外,这可能是列出目录内容的最糟糕的方式。见stackoverflow.com/questions/499673/…
  • ls 只是一个例子,它可以是任何其他命令。但是为什么只有越狱呢?为什么我不能只执行一个 shell 命令?
  • 因为在 iOS 中是不允许的。任何涉及直接创建另一个进程的操作都将被安全策略拒绝。
  • 嗯...那失败了,我猜 :) 将其发布为答案,如果没有其他人能够提供帮助,我会接受。

标签: ios shell nstask


【解决方案1】:

除非您在越狱手机上运行,​​否则任何在 iOS 中直接创建辅助进程的尝试都会被安全策略拒绝。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-28
    • 2012-04-21
    • 2012-02-25
    • 2018-02-11
    • 2013-08-21
    • 2012-02-07
    • 1970-01-01
    相关资源
    最近更新 更多