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