Swift 处理发送到标准输出的数据
我正在调用一个Swift 处理发送到标准输出的数据,swift,Swift,我正在调用一个AVFoundation方法,该方法将大量数据记录到stdout,并且没有关闭此记录的选项 在将数据发送到stdout之前,是否可以编写类似中间件的程序来处理数据 类似这样的伪代码: Process.beforePrint( data => { if (data !== blackListedData) { print(data); } }); 使用stdio功能可以使用许多选项。下面是一个将标准输出重定向到日志文件的简单方法: class Stdo
AVFoundation
方法,该方法将大量数据记录到stdout
,并且没有关闭此记录的选项
在将数据发送到stdout之前,是否可以编写类似中间件的程序来处理数据
类似这样的伪代码:
Process.beforePrint( data => {
if (data !== blackListedData) {
print(data);
}
});
使用
stdio
功能可以使用许多选项。下面是一个将标准输出重定向到日志文件的简单方法:
class StdoutFilter {
let path: String = {
let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
return (paths[0] as NSString).stringByAppendingPathComponent("swift.log")
}()
func startFilter() {
freopen(path, "w", stdout)
}
func stopFilter() {
fclose(stdout)
}
}
您可以像这样使用这个简单的实现:
let filter = StdoutFilter()
print("This goes to stdout…")
filter.startFilter()
print("This gets logged to the file…")
print("Put your AVFoundation stuff here.")
filter.stopFilter()
print("And we're back to normal!")
这可以通过几个明显的方式进行修改。例如,您可以将输出重定向到/dev/null
。您也可以尝试监视该文件并应用谓词来确定是否应该启动或停止筛选器,但我认为这比我现在有时间做的要复杂得多
最后一点注意:
startFilter()
函数中的“w”
将覆盖文件(如果存在)。如果您希望附加现有文件,请使用“a”
。谢谢您的回答!我不知道如何进行过滤:(我需要重定向到/dev/null
包含LevelIDC
的每一行。否则,我希望它能正常记录。@Matheus我想你可以采取这样的方法:(1)调用startFilter()
到日志文件,(2)创建另一个不断读取文件的函数,(3)如果文件有一个新行不包含LevelIDC
,则调用stopFilter()
,再次打印,然后再次调用startFilter()