我有以下Swift脚本(名为test.swift):
#!/usr/bin/swift
import Foundation
print("\(CommandLine.arguments.count)")
if (CommandLine.arguments.count == 1) {
let task = Process()
task.arguments = [ "-c", "./test.swift child" ]
task.launchPath = "/bin/zsh"
do {
try task.run()
task.waitUntilExit()
} catch {
print(error)
}
} else {
print("Input requested:")
print(readLine() ?? "NULL")
}
我希望输出为:
1
2
Input requested:
<user inputs some text> <user presses enter>
<echo text>
实际输出为:
1
2
Input requested:
<user inputs some text> <user presses enter>
readLine
上的子进程挂起。根据Swift documentation,如果task.standardInput
没有设置,那么它应该从父进程继承。
我的主要目标是能够允许用户通过终端向子进程输入。最好不需要父进程也能输入。
为什么子进程不能像父进程一样在按回车键后收到输入的文本?有什么办法解决这个问题吗?
1条答案
按热度按时间pod7payv1#
我通过使用一个临时管道对象和一些直接内容阅读来解决这个问题。