2016-10-25 24 views
1

作業中に問題が発生しました。ここにあります。シェルスクリプトと対話するためのPythonスクリプトの作成方法

私はいくつかのスクリプト(主にシェルスクリプト)を実行する必要があり、それらを自動的に実行するPythonスクリプトを書きたいと思います。これらのシェルスクリプトの1つは、実行中に対話型入力が必要です。私が困っていることは、入力プロンプトを読む方法を見つけることができないため、続行するには何を入力するか決定できないということです。

私はこのような何かに問題を単純化:

を内部greeter.shを実行mediator.pyという名前のスクリプトは、あります。 mediatorgreeterの入力プロンプトを受け取ってユーザーに出力し、ユーザーの入力を受け取り、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 

は、私は次の順序でこれをしたい:

  1. ユーザーを(それは私です)mediator.py
  2. mediator実行greeter.sh内部で実行
  3. mediator入力プロンプトがgreeterを入力し、画面に出力します。 (このとき、greeterは、ユーザーの入力を待っている。これは私がで立ち往生主な問題である)
  4. ユーザー入力文字列(例えば、「マイク・」)、mediator文字列「マイク」を取得し、送信それgreeter
  5. からgreeter名「マイク」を取得し、挨拶を得る挨拶に
  6. mediatorを印刷し、画面に出力して。

は、私はいくつかの解決策を検索しPIPEに向けサブプロセスのstdoutsubprocessモジュールにPopen機能を使用することを決定し、それはこのようなものです:

sb = subprocess.Popen(['sh', 'greeter.sh'], stdout = subprocess.PIPE, stdin = stdout, stderr = stdout) 

が、私はメインを解決することはできません上記のの手順3の問題。誰かが私に助けの助言をくれますか?どうもありがとう!

答えて

0

あなたはもっと複雑(脆弱)になります。トップレベルのすべてをコーディングするのではなく、サブプロセスなどを使用してスクリプトを使用するかのように、関数がどこにあるかのように、モジュールと関数を記述してメインスクリプトから使用します。

はここでスクリプト自体に含まれるすべてを持つ例ですが、あなたが最初にあなたの答えのために異なるスクリプト間でいくつかの機能を共有する

# main.py 
def ask_name(): 
    return raw_input("Please enter your name: ") 

def greet(name): 
    return "Hello, {} name !\n".format(name) 

def main(): 
    name = ask_name() 
    print greet(name) 

if __name__ == "__main__": 
    main() 
+0

感謝が必要な場合は、個別のモジュールに分割することができます。私は仕事でそれを会ったこの使用法のシナリオを考え出した。私はいくつかのシェルスクリプトを実行する必要があり、私は自動的にそれらを実行するPythonスクリプトを記述したいと思います。これらのシェルスクリプトの1つは、exexuting中にいくつかのオプションを入力する必要があるため、シェルスクリプトのプロンプトを表示し、実行するために入力するオプションを決定する必要があります。それでおしまい。 –

+0

あなたはこのコンテキストであなたの質問を編集する必要があります - それはどういうわけか違う問題です。私は 'サブプロセス'エキスパートFWIWに任せます... –

+0

ありがとう〜質問は今再説明されました。 –

関連する問題