axl*_*411 5 shell cocoa foundation swift
我有一个命令行应用程序A,在A我执行可执行脚本时B,B我期待来自stdin的输入.
我编写了一个演示,A使用Foundation's Processapi 在Swift中实现,发现B无论用什么语言实现,都无法从stdin获取用户输入.
码:
// `A`'s main.swift
import Foundation
let process = Process()
process.launchPath = PATH_TO_SCRIPT_B
process.launch()
process.waitUntilExit()
// `B`
#!/usr/bin/swift
print("intpu something")
let input = readLine()
print("input: \(input)")
Run Code Online (Sandbox Code Playgroud)
process根据文档,我没有设置输入:
如果未使用此方法,则标准输入将从创建接收器的进程继承.
更新:
A是使用Swift Package Manager创建的可执行包.我曾经swift package generate-xcodeproj生成一个Xcode项目文件.我确认如果我运行使用swift build或xcodebuild在shell中构建的可执行文件,则从stdin获取输入的问题B出现了.但是如果我直接在Xcode中运行它,通过command + R在Xcode中按下它,那么它可以工作.因此,如果我理解在shell和Xcode中运行可执行文件之间的区别,我可能会使一切正常.
小智 1
func task() {
print("input here")
let x = input()
print ("inputed:" + x)
}
func input() -> String {
let keyboard = FileHandle.standardInput
let inputData = keyboard.availableData
let strData = String(data: inputData, encoding: .utf8)!
let string = strData.trimmingCharacters(in: .newlines)
return string
}
task()
Run Code Online (Sandbox Code Playgroud)
希望能帮助到你
| 归档时间: |
|
| 查看次数: |
502 次 |
| 最近记录: |