我尝试从我的应用程序启动一个命令文件,所以我需要使用" posix_spawn"。但是使用它需要奇怪的指针使用。我没有找到任何Swift(3.0)的例子,只有C ++或Objective C我无法翻译。
我只需要这样的东西(在旧的系统调用中):
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
答案 0 :(得分:0)
我使用swift来调用objective-c menthod(虽然不是最好的方法)
定义一个objective-c util menthod
#import "SystemTaskHelper.h"
@implementation SystemTaskHelper
+(void)performSystemTask:(NSString *)task
{
system([task UTF8String]);
}
@end
将objective-c util.h导入Bridging-Header.h,并迅速使用
SystemTaskHelper.performSystemTask("ls -param >file.txt")