仕事で問題が発生しました。ここにあります。
実行するスクリプト (ほとんどはシェル スクリプト) がいくつかあり、それらを自動的に実行する Python スクリプトを作成したいと考えています。これらのシェル スクリプトの 1 つは、実行中にインタラクティブな入力を必要とします。私を悩ませたのは、入力プロンプトを読み取る方法が見つからないことです。そのため、何を入力して続行するかを決めることができません。
問題を次のように単純化しました。
内部mediator.pyで実行される という名前のスクリプトがあります。greeter.shはの入力プロンプトmediatorをgreeter取得してユーザーに出力し、ユーザーの入力を取得して に渡しますgreeter。は、ユーザーの観点からmediatorとまったく同じように動作する必要があります。greeter
ここにあるgreeter.sh:
#! /bin/bash
echo "Please enter your name: " # <- I want 'mediator.py' to read this prompt and show it to me, and then get what I input, then pass my input to 'greeter.sh'
read name
echo "Hello, " $name
以下の順番で行いたいと思います。
- ユーザー(それは私です)が実行します
mediator.py mediatorランgreeter.shインサイド_- の
mediator入力プロンプトを取得greeterし、画面に出力します。(現時点でgreeterは、ユーザーの入力を待っています。これが私が立ち往生している主な問題です) - ユーザーが文字列 (たとえば、「Mike」) を入力し、文字
mediator列「Mike」を取得して、それをに送信します。greeter - 「マイク」という
greeter名前を取得し、挨拶を印刷します - あいさつを取得し、
mediator画面に出力します。
私はいくつかの解決策を探し、サブプロセスのモジュールでPopen関数を使用することに決めました、それは次のようなものです:subprocessstdoutPIPE
sb = subprocess.Popen(['sh', 'greeter.sh'], stdout = subprocess.PIPE, stdin = stdout, stderr = stdout)
しかし、上記のステップ 3の主な問題を解決できません。誰か助けてくれるアドバイスをくれませんか?どうもありがとう!