1

仕事で問題が発生しました。ここにあります。

実行するスクリプト (ほとんどはシェル スクリプト) がいくつかあり、それらを自動的に実行する Python スクリプトを作成したいと考えています。これらのシェル スクリプトの 1 つは、実行中にインタラクティブな入力を必要とします。私を悩ませたのは、入力プロンプトを読み取る方法が見つからないことです。そのため、何を入力して続行するかを決めることができません。

問題を次のように単純化しました。

内部mediator.pyで実行される という名前のスクリプトがあります。greeter.shはの入力プロンプト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. ユーザーが文字列 (たとえば、「Mike」) を入力し、文字mediator列「Mike」を取得して、それをに送信します。greeter
  5. 「マイク」というgreeter名前を取得し、挨拶を印刷します
  6. あいさつを取得し、mediator画面に出力します。

私はいくつかの解決策を探し、サブプロセスのモジュールでPopen関数を使用することに決めました、それは次のようなものです:subprocessstdoutPIPE

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

しかし、上記のステップ 3の主な問題を解決できません。誰か助けてくれるアドバイスをくれませんか?どうもありがとう!

4

1 に答える 1

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()
于 2016-10-25T08:39:36.690 に答える