У меня есть подпроцесс, который я хочу вызвать из powershell, который может быть интерактивным или я могу направить данные прямо в него. Например:
# This is interactive:
& c:\python27\python.exe
# This takes redirected input:
echo hi | & c:\python27\python.exe -c "print repr(raw_input())"
Я хочу создать функцию, которую можно использовать для переноса вызова в такой процесс. Я могу сделать это:
function python() {
& c:\python27\python.exe @args
}
# This starts an interactive prompt:
python
# The piped data disappears and the process still reads from the console:
echo hi | python -c "print repr(raw_input())"
Или я могу сделать это:
function python() {
$input | & c:\python27\python.exe @args
}
# This doesn't accept interactive input:
python
# The piped data is passed through to the sub-process as intended:
echo hi | python -c "print repr(raw_input())"
Я не могу понять, как написать функцию, которая обрабатывает оба случая. Если он вызывается без конвейера, я хочу, чтобы он запускал подпроцесс, который читает из stdin, и если он вызывается с входом конвейера, я хочу, чтобы он передавал это в stdin подпроцесса. Я могу это сделать?