私はコマンドラインアプリケーションA
を持っていて、A
に実行ファイルB
を実行します。B
私はstdinからの入力を期待しています。Cocoaコマンドラインアプリケーションのサブプロセスでstdinから入力を取得する
私は、どんな言語で実装に関係なく、標準入力からユーザー入力を取得することはできませんB
ことを見出し、Foundation
のProcess
APIを使用して、スウィフトでA
を実施し、デモを書きました。
コード:
// `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)")
私はDOCに従うためprocess
の入力を設定しなかった:
この方法が使用されていない場合、標準入力がプロセスから継承されています受信者を作成した
UPDATE:
A
はスウィフトパッケージマネージャを使用して作成された実行可能パッケージです。私はswift package generate-xcodeproj
を使ってXcodeプロジェクトファイルを生成しました。シェルでswift build
またはxcodebuild
を使ってビルドした実行可能ファイルを実行すると、stdinからの入力をB
にする際の問題が発生することが確認されました。しかし、Xcodeの中でcommand + R
を押すと、Xcodeの中で直接実行すると、うまくいきました。したがって、シェルとXcodeで実行可能ファイルを実行することの違いを理解すれば、おそらくすべてを動作させることができます。
を役に立てば幸いあなたは、コマンドラインから 'shell'組み込み関数からの入力を渡すことが許可されていますか? – Inian
@Inian私はあなたが言及しているコンセプト(シェル自体に関連していますか?)に精通していませんが、私はRubyに 'A'を書いていました。これが関連していると思われる場合は、さらに情報を提供できますか? – axl411