問題タブ [python-interactive]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - シェル スクリプトと対話する Python スクリプトを作成する方法
仕事で問題が発生しました。ここにあります。
実行するスクリプト (ほとんどはシェル スクリプト) がいくつかあり、それらを自動的に実行する Python スクリプトを作成したいと考えています。これらのシェル スクリプトの 1 つは、実行中にインタラクティブな入力を必要とします。私を悩ませたのは、入力プロンプトを読み取る方法が見つからないことです。そのため、何を入力して続行するかを決めることができません。
問題を次のように単純化しました。
内部mediator.py
で実行される という名前のスクリプトがあります。greeter.sh
はの入力プロンプトmediator
をgreeter
取得してユーザーに出力し、ユーザーの入力を取得して に渡しますgreeter
。は、ユーザーの観点からmediator
とまったく同じように動作する必要があります。greeter
ここにあるgreeter.sh
:
以下の順番で行いたいと思います。
- ユーザー(それは私です)が実行します
mediator.py
mediator
ランgreeter.sh
インサイド_- の
mediator
入力プロンプトを取得greeter
し、画面に出力します。(現時点でgreeter
は、ユーザーの入力を待っています。これが私が立ち往生している主な問題です) - ユーザーが文字列 (たとえば、「Mike」) を入力し、文字
mediator
列「Mike」を取得して、それをに送信します。greeter
- 「マイク」という
greeter
名前を取得し、挨拶を印刷します - あいさつを取得し、
mediator
画面に出力します。
私はいくつかの解決策を探し、サブプロセスのモジュールでPopen
関数を使用することに決めました、それは次のようなものです:subprocess
stdout
PIPE
しかし、上記のステップ 3の主な問題を解決できません。誰か助けてくれるアドバイスをくれませんか?どうもありがとう!
python - Python IDLEで不適切なインデントが許可されていますか?
wwii の回答を見ながら、私は彼のインデントについて、それは間違っているとコメントしました。しかし、私の IDLE で彼のコードを実行した後、問題なく実行されることがわかりました。
正しい結果が得られていることを確認するために、いくつかの例を試しました。
ご覧のとおり、すべて正常に動作しました。通常のスクリプトで同じことをしようとすると、Python はプログラムを実行する前にエラーを発生させ、ブロックをインデントするのを忘れていることを通知します。
対話型 IDLE ではこの種のインデントが許可されているのに、通常のスクリプトでは許可されていないのはなぜですか? IDLE のドキュメント、より具体的にはセクション25.5.2.1 Automatic indentationを調べましたが、答えを見つけるのに役に立ちませんでした。
さらに、関数に関する Python ドキュメントには、関数本体をインデントする必要があると記載されています。
キーワード def は関数定義を導入します。その後に、関数名と括弧で囲まれた仮パラメーターのリストが続く必要があります。関数の本体を形成するステートメントは次の行から始まり、インデントする必要があります。
(私のものを強調)
IDLE ではこの種のインデントが許可されているのに、通常のスクリプトでは完全にシャットダウンされるのはなぜですか? これはわざとですか?もしそうなら、この動作はどこかに文書化されていますか?