我尝试从我的应用程序启动一个命令文件,所以我需要使用“posix_spawn”。但是这需要奇怪地使用指针。我没有找到任何Swift(3.0)的例子,只有C++或Objective C,我无法翻译。使用posix_spawn?
我只需要类似的东西(在旧系统调用):
let err = system("ls -param >file.txt")
任何想法?编号: 链接的解决方案不匹配。 首先它不使用编译器提到的posix_spawn函数。它使用NSTask,这似乎也被放弃。但我试过这个例子,结果如下:
func shell(launchPath: String, arguments: [String]) -> String
{
let task = Process()
task.launchPath = launchPath
task.arguments = arguments
let pipe = Pipe()
task.standardOutput = pipe
task.launch()
let data = pipe.fileHandleForReading.readDataToEndOfFile()
let output: String = NSString(data: data, encoding: String.Encoding.utf8.rawValue)! as String
return output
}
这里所有的XCode 8所需的改变都做了。但是在调用时,它永远不会从“.launch()”返回。
某处在输出调试窗口,我发现这条线:
2016-09-15 15:06:36.793 DSRenamer[96562:2569582] launch path not accessible
相同的命令工作在终端窗口罚款:
/usr/local/bin/ExifTool -ext .CR2
可能的[复制如何运行一个脚本迅速的终端命令? (例如xcodebuild)](http://stackoverflow.com/questions/26971240/how-do-i-run-an-terminal-command-in-a-swift-script-eg-xcodebuild) –
我上面添加了一条评论。 – Peter71
NSTask没有被放弃,它只是被重命名为Swift 3中的Process。您可能没有正确调用它。 ''/ usr/local/bin/ExifTool“应该是启动路径,''”-ext“,”.CR2“]'参数数组。 –