4
我有一個命令行應用程序A
,並在A
我執行一個可執行腳本B
,在B
我期待從標準輸入輸入。從stdin獲取輸入在Cocoa命令行應用程序的子進程中
我寫了一個演示,在斯威夫特實施A
,使用Foundation
的Process
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
的輸入根據該文檔,因爲:
如果不使用這種方法,標準輸入從工藝繼承那創造了接收器。
UPDATE:
A
是用斯威夫特包管理器創建的可執行程序包。我使用swift package generate-xcodeproj
來生成Xcode項目文件。我確認如果我在shell中運行使用swift build
或xcodebuild
構建的可執行文件,則出現從B
的stdin獲取輸入的問題。但是,如果我直接在Xcode中運行它,通過在Xcode內按command + R
,然後它工作。所以如果我理解在shell和Xcode中運行可執行文件的區別,我可能會使所有的工作都成功。
你是否允許通過從命令行'shell'內置插件的輸入? – Inian
@Inian我不熟悉你提到的概念(這與shell本身有關?),但是我在Ruby中編寫了'A',它的工作方式和我的預期一樣。如果你認爲這可能是相關的,那麼你能提供更多的信息嗎? – axl411