gpt4 book ai didi

swift - 在 Cocoa 命令行应用程序的子进程中从标准输入获取输入

转载 作者:搜寻专家 更新时间:2023-10-31 08:06:11 25 4
gpt4 key购买 nike

我有一个命令行应用 A ,并在 A我执行一个可执行脚本 B , 在 B我期待来自标准输入的输入。

我写了一个演示,实现了A在 Swift 中,使用 FoundationProcess api,发现 B ,无论以何种语言实现,都无法从标准输入中获取用户输入。

代码:

// `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)")

我没有设置 process根据文档的输入:

If this method isn’t used, the standard input is inherited from the process that created the receiver.


更新:

A是一个使用 Swift 包管理器创建的可执行包。我用了swift package generate-xcodeproj生成 Xcode 项目文件。我确认如果我运行使用 swift build 构建的可执行文件或 xcodebuild在 shell 中,从 B 获取标准输入的问题出现了。但是,如果我直接在 Xcode 中运行它,按 command + R在 Xcode 中,然后它起作用了。因此,如果我了解在 shell 和 Xcode 中运行可执行文件之间的区别,我可能可以让一切正常运行。

最佳答案

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()

希望对你有帮助

关于swift - 在 Cocoa 命令行应用程序的子进程中从标准输入获取输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40781358/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com