Swift:为Process()

时间:2018-06-05 19:22:29

标签: swift terminal

我正在尝试让Swift Playground在Mac终端中运行命令并让它返回输出(在终端中打印的内容)。我有这个功能,可以在大多数命令上正常工作:

func runCommand(path: String, args: [String]) -> (data: String, error: String) {
    // create task instance
    let task = Process()

    // set the task parameters
    task.launchPath = path
    task.arguments = args

    // create pipes and make the task put all the output there
    let pipe = Pipe()
    task.standardOutput = pipe
    let errorPipe = Pipe()
    task.standardError = errorPipe

    // launch task
    task.launch()

    // get data
    let data = pipe.fileHandleForReading.readDataToEndOfFile()
    let dataOutput = NSString(data: data, encoding: String.Encoding.utf8.rawValue)! as String
    let errorData = errorPipe.fileHandleForReading.readDataToEndOfFile()
    let errorOutput = NSString(data: errorData, encoding: String.Encoding.utf8.rawValue)! as String

    return (dataOutput, errorOutput)
}

我遇到的问题是使用Click的Python 3命令。每当我尝试使用runCommand()运行此命令时,它都会返回一个错误,指出Python配置为使用ASCII而不是UTF-8作为环境编码这一事实存在问题。
在终端中运行命令时,如果其语言环境类别字符类型设置为ASCII,则会出现同样的问题:

$ export LC_CTYPE="ASCII"

但是,可以通过将其设置为UTF-8来修复它:

$ export LC_CTYPE="UTF-8"

问题是,如何在Swift中实现相同的功能(将LC_CTYPE设置为UTF-8)?

编辑:
这个问题被标记为处理字典功能的问题的副本,而这个问题是关于设置区域设置/字符类型,因此是不同的。如果这个问题的答案实际上是在另一个答案中,我想请求进一步解释。

0 个答案:

没有答案