Я работаю над приложением командной строки, написанным на Swift, и у меня возникают проблемы с чтением ввода.Я хочу собрать список файлов как в качестве аргументов для приложения, так и в виде данных из таких утилит, как find
.Например:
wrench -f aFile.txt
find . -name *.txt | wrench
Аргументы просты, но у меня проблемы с чтением данных из канала.Если я это сделаю:
let standardInput = FileHandle.standardInput
let data = standardInput.readDataToEndOfFile()
print("Files: \(String(data: data, encoding: .utf8)!)")
Он работает с данными по каналам, но зависает, когда не работает.
Если I:
while let line = readLine() {
print("\(line)")
}
Он снова зависает, когда не обвязан.Другой вариант:
standardInput.readabilityHandler = { fileHandle in
print("Data \(String(data: fileHandle.availableData, encoding: .utf8)!)")
}
Похоже, что работает, но когда есть много файлов, программа заканчивается, прежде чем все входные данные были прочитаны.
Так что мне также нужно найти способчтобы сохранить программу до конца.файлы были прочитаны и обработаны.
Я много занимался поиском, но пока не смог найти никого, кто бы это сделал (что странно, я бы подумал, что этого достаточно).
Кто-нибудь знает, как решить эти проблемы?