在swift中使用Process()来表示崩溃时出现运行时错误

时间:2017-09-06 07:03:00

标签: swift bash

我的代码如下所示:

    let process = Process()
    process.launchPath = "/bin/sh"
    process.arguments = ["symbolicatecrash", "crash.crash"]

    let pipe = Pipe()
    process.standardOutput = pipe
    process.launch()

    let data = pipe.fileHandleForReading.readDataToEndOfFile()
    let output: String = String.init(data: data, encoding: .utf8)!

但是,我收到此错误

symbolicatecrash: line 14: use: command not found
symbolicatecrash: line 15: use: command not found
symbolicatecrash: line 16: use: command not found
symbolicatecrash: line 17: syntax error near unexpected token `('
symbolicatecrash: line 17: `use Cwd qw(realpath);'

symbolicate脚本和crash.crash都存在于Swift执行当前进程的目录中。因此,Process()非常容易访问它们。

这个错误意味着什么,可能解决这个问题?

1 个答案:

答案 0 :(得分:1)

分析您所指的脚本会发现它是一个Perl脚本。但是,您告诉Process运行shell脚本(process.launchPath = "/bin/sh"),这就是为什么这不起作用。

应该将launchPath设置为脚本的路径,如下所示:

process.launchPath = "/path/to/symbolicatecrash"
process.arguments = ["crash.crash"]

如果可以直接从命令行调用脚本,则无需指定要使用的解释器(在您的示例中为/bin/bash,如果是/usr/bin/perl)。在symbolicatecrash的情况下,脚本可以直接执行,因为它在脚本的“shebang”行中正确指定了解释器:

#!/usr/bin/perl -w