問題タブ [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.

0 投票する
1 に答える
729 参照

python - シェル スクリプトと対話する Python スクリプトを作成する方法

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

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

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

内部mediator.pyで実行される という名前のスクリプトがあります。greeter.shはの入力プロンプトmediatorgreeter取得してユーザーに出力し、ユーザーの入力を取得して に渡しますgreeter。は、ユーザーの観点からmediatorとまったく同じように動作する必要があります。greeter

ここにあるgreeter.sh

以下の順番で行いたいと思います。

  1. ユーザー(それは私です)が実行しますmediator.py
  2. mediatorランgreeter.shインサイド_
  3. mediator 入力プロンプトを取得greeterし、画面に出力します。(現時点でgreeterは、ユーザーの入力を待っています。これが私が立ち往生している主な問題です)
  4. ユーザーが文字列 (たとえば、「Mike」) を入力し、文字mediator列「Mike」を取得して、それをに送信します。greeter
  5. 「マイク」というgreeter名前を取得し、挨拶を印刷します
  6. あいさつを取得し、mediator画面に出力します。

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

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

0 投票する
3 に答える
1084 参照

python - Python IDLEで不適切なインデントが許可されていますか?

wwii の回答を見ながら、私は彼のインデントについて、それは間違っているとコメントしました。しかし、私の IDLE で彼のコードを実行した後、問題なく実行されることがわかりました。

正しい結果が得られていることを確認するために、いくつかの例を試しました。

ご覧のとおり、すべて正常に動作しました。通常のスクリプトで同じことをしようとすると、Python はプログラムを実行する前にエラーを発生させ、ブロックをインデントするのを忘れていることを通知します。

ここに画像の説明を入力

対話型 IDLE ではこの種のインデントが許可されているのに、通常のスクリプトでは許可されていないのはなぜですか? IDLE のドキュメント、より具体的にはセクション25.5.2.1 Automatic indentationを調べましたが、答えを見つけるのに役に立ちませんでした。

さらに、関数に関する Python ドキュメントには、関数本体をインデントする必要があると記載されています。

キーワード def は関数定義を導入します。その後に、関数名と括弧で囲まれた仮パラメーターのリストが続く必要があります。関数の本体を形成するステートメントは次の行から始まり、インデントする必要があります

(私のものを強調)

IDLE ではこの種のインデントが許可されているのに、通常のスクリプトでは完全にシャットダウンされるのはなぜですか? これはわざとですか?もしそうなら、この動作はどこかに文書化されていますか?