У меня есть приложение командной строки A
, и в A
я выполнить исполняемый скрипт B
, в B
Я ожидаю, что входной сигнал от стандартного ввода.Получение вход со стандартного входа в суб процесса какао командной строки, приложения
Я написал демку, внедрение A
в Swift, используя Foundation
«s Process
апи, находя, что 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
«ы, так как в соответствии с Doc:
Если этот метод не используется, стандартный ввод унаследована от процесса который создал приемник.
UPDATE:
A
представляет собой исполняемый пакет, созданный с помощью диспетчера Swift пакета. Я использовал swift package generate-xcodeproj
для создания файла проекта Xcode. Я подтвердил, что если я запустил исполняемый файл, построенный с использованием swift build
или xcodebuild
в оболочке, возникла проблема с получением ввода от stdin от B
. Однако, если я запускаю его непосредственно внутри Xcode, нажав command + R
внутри Xcode, он сработает. Поэтому, если я понимаю разницу между запуском исполняемого файла в оболочке и Xcode, я, вероятно, могу заставить все работать.
Вы разрешили пройти входной сигнал от 'shell' встроенных модулей из командной строки? – Inian
@ Inian Я не знаком с концепцией, которую вы упоминаете (что связано с самой оболочкой?), Но я написал 'A' в Ruby и работает так, как я ожидал. Если вы считаете, что это может быть связано, вы могли бы предоставить дополнительную информацию? – axl411