問題タブ [pexpect]
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 pexpect sendcontrol キー文字
タスクを自動化するためにpythons pexpectモジュールを使用しています.sendcontrolで使用するキー文字を理解するのに助けが必要です. どのようにコントロールキー ENTER を送信できますか? 今後の参考のために、どのように重要な文字を見つけることができますか?
ここに私が取り組んでいるコードがあります。
python - pexpect の相互作用についてはほとんど支援が必要ない
このコードを pexpect モジュールで動作させるには、ほとんど支援が必要ありません。
このコードは、サーバーにログインして git pull を実行し、最新のコード (アップグレードが利用可能な場合) をダウンロードするか、「既に最新です」というメッセージを送信します。
コードは実際にはパスワード画面を識別しますが、「すでに最新」というテキストを識別しません
ここに何か欠けているかどうかわかりません。
コードのスニペットは次のとおりです。
どんな助けでも大歓迎です。
ありがとう、ビジェイ
java - Javaに相当するPexpect?
Javaに相当するpexpectはありますか? commons exec または processbuilder を使用し、stdin/stdout をリダイレクトしてからストリームなどを解析することで、機能を複製できることはわかっています。
私が望むのは、Python で行っているように、対話型のコマンド ライン プログラムを実行することです。小さな例は次のとおりです。
そして、myProg をインタラクティブな方法で使用します (コマンドの送信、結果の取得/解析など)。myProg.before などを使用して、2 つの呼び出し間の結果を取得できます。
Javaで同じ機能を同じ簡単な方法で提供するパッケージはありますか?
python - サブプロセス通信を改善する必要がある
私はPythonプログラミングとプログラミングの初心者でもあります。この音が基本的な質問であるなら、親切に言い訳してください。
私はもちろんmakecleanとmakeongitを実行するツールを開発しています。
これらのmakeコマンドを実行するためにサブプロセスモジュールを使用しています。
1つの観察は次のとおりです:私はmakeコマンドの結果を見るためにcommunicateを使用します。通信の問題は、subprocess.popenが終了するのを待ってから、出力を送信することです。
makeコマンドが30分間実行された場合、画面に30分間出力が表示されず、通信は30分間収集したデータ全体を送信します。
質問は次のとおりです。stdoutに何かが表示されたときにサブプロセスから出力を取得し、それを画面に印刷する方法はありますか?
私がこれまでに書いたコードは次のとおりです。
これについて何か考えはありますか?pexpect.run()を使用してみましたが、うまくいきませんでした...
-Vijay
python - Windows で wexpect を実行する
Windows 7 に wexpect をインストールしました。コマンドを実行しようとすると、以下のエラーが発生します。私は MKS ツールキットを使用しているのでls
、有効なコマンドです。
誰か助けてくれませんか?
python - pexpect の出力をフィルタリングする方法
python pexpect で、出力をフィルタリングしたい。たとえば、以下のコードでは、日付のみを印刷したいと考えています。
実際の出力:
期待される出力:
python - pexpect.spawn が呼び出されると、生成されたプログラムの実行はすぐに開始されますか?
(または、など) が呼び出されるpexpect.spawn
までオブジェクトは非アクティブですか、または呼び出されたプロセスはすぐに開始されますか? 例えば:expect
interact
send
print
ステートメントが発生したとき、すでにエコー コマンドを裏で実行しており、呼び出しが処理されるpexpect
までリターンを保留しているだけですか? または、または同様の最初の呼び出しまでexpect
何も起こらなかった (実行されていない) か?echo
expect
乾杯
python - pexpect: ssh トンネル経由で実行されたコマンドからログを取得します
pexpect ライブラリを使用して Python スクリプトを作成しようとしています。
私がやろうとしていることは次のとおりです:
cmdrunのsendlineを実行する最後の行まで、すべてが期待どおりに機能します。このコマンドはカスタム tcpdump コマンドです。sendctrl('C') を実行してコマンドを強制終了し、ssh トンネルをエスケープするまで、コマンドを無期限に実行したいと考えています。
ただし、 sendline(cmdrun + '\r') の後に interact() を配置しない限り、tcpdump からの出力は出力されません。
とにかく、対話型の端末制御が必要ないので、対話なしでこれを行うことができますか? 私が望むのは、tcpdump出力をキャプチャして一定期間待機し、sshトンネルとともにtcpdumpを強制終了できるようにすることです。
python - CPython は、Windows で生成された tty 端末とうまくやり取りしません
winpexpect を使用して端末を生成しようとするたびに (例: openssh, ssh
)。私がそうするwinpexpect.winspawn('ssh ...')
と、「標準入力は端末ではないため、疑似端末は割り当てられません。」というメッセージが表示されます。端末を強制的に使用するwinpexpect.winspawn('ssh -t -t ...')
と、ssh クライアントが実際にサーバーに接続しているにもかかわらず、読み取りバッファーに何も取得されません。同じことが他の対話型端末にも当てはまります。ハングするだけで、読み取りバッファーには何も表示されません。ただし、ping
winpexpect などの端末のコマンドの場合は機能します。
実際に機能することがわかったのは、パテの plink.exe を使用すること winpexpect.winspawn('plink ...'
です。これは putty.exe と同じですが、端末エミュレーションは行いません。生の telnet/復号化された ssh データを取得するだけです。ただし、これは実際には理想的なソリューションではありません。
spawner/expect ライブラリを Windows の端末で動作させる方法に本当に行き詰っています! 純粋なJavaだけであるexpectJを使用してみましたが、それにも同じ問題があります。
python - 特定のコマンドを実行した後、Pexpect が断続的にハングする (EOF を検出しない) のはなぜですか?
環境:
を使用して記述されたコードがいくつかありますpexpect
。その仕事は、コマンドの「ライブ」出力を提供することです。つまり、コマンドが完了するまで待ってからその出力と対話するのではなく、コマンドが何らかの出力を生成するとき、またはその直後に何かを出力します。
私がしているのは、サービスの開始と停止だけです。これを行うにはspawn
、プロセスを実行し、次のように各行を出力します。
このコードは、サービスをループするだけです。開始と停止を繰り返し、開始/停止の出力を出力します。出力をうまく印刷します。しかし、最終的には「OUT 2」の直前でハングします。出力を表示して、service
呼び出しが実行を停止するのを確認できます。ただし、このwatch
関数は EOF を発生させずに終了します。
これは、すべてのサービスで発生するわけではありません。一部のサービスは無期限にループします。zend-server
ただし、他のいくつかの無関係なコマンドとともに、同じように断続的に失敗します。
「最終的にハングする」とは、サービスを数回 (実行ごとに可変) 開始/停止し、ハングすることを意味します。それは通常、最初の呼び出しでは決してありませんが、少なくとも 2 番目の呼び出しでは常に 4-6 の後にガムアップします (したがって、del
ステートメント; 私はそれを安全にプレイすると考えました)。
Python 2.6.6、CentOS (64) 6.3、Pexpect 2.3-6、FWIW
質問:
pexpect
特定のコマンドでハングアップするのはなぜですか? この問題を解決するにはどうすればよいですか? タイムアウトを使用することは、実行可能な解決策ではありません。これらのコマンドの一部は、実際には任意の時間実行できるからです。service zend-server stop
それほど長くかからず、終了するのを観察できるので、例として選んだのはこれだけです。
私が試したこと:
watch
メソッドを を使用する次のメソッドに置き換えてみましたexpect('\n')
が、結果は同じです。さまざまな数の再起動が行われ、最終的にハングします。
とともに編集pexpect.EOF
された配列に追加し、戻り値を処理してループから抜け出すこともできますが、それでも同じ場所でハングします。expect
\n