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

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

python - Python の pexpect に関する質問

pexpect と subprocess.Popen の両方を python から試して、外部の長期バックグラウンド プロセス (このプロセスはソケットを使用して外部アプリケーションと通信します) を呼び出しました。詳細は次のとおりです。

  1. subprocess.Popen(launchcmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) これは正常に動作します。他に何もする必要はありません。ただし、すぐに出力を取得する必要があるため、パイプ ファイル バッファーの問題を回避するために pexpect を選択します。

  2. obj= pexpect.spawn(launchcmd, timeout=None) 外部プロセスを起動した後、別のスレッドを使用して「readline」を実行し、起動されたプロセス「obj」の出力を読み取り、すべて問題ありません。

  3. obj= pexpect.spawn(launchcmd, timeout=None) 外部プロセスを起動した後、それ以上何もしませんでした。つまり、そのままにしておきました。ただし、「ps -e」コマンドを使用すると、起動されたプロセスを見つけることができますが、起動されたプロセスはブロックされているようで、ソケットで他のアプリケーションと通信できません。

わかった。より具体的には、質問を定式化するためのサンプルコードをいくつか入れました。

3番目のオプションの何が問題なのか誰か教えてもらえますか? また、別のスレッドを使用して出力を操作しなかったことが原因である場合、最初のオプションが subprocess.popen で機能するのはなぜですか? ソケットを使用してプロセスを起動する pexpect に問題があると思われますが、特にオプション 2 がうまく機能することを考えると、確信が持てません。

0 投票する
0 に答える
377 参照

python - pexpect sftp: ファイル オブジェクトとしてのソース ファイル

転送するファイルをファイルシステムから読み込まないようにすることはできますか? サーバーからファイルを取得し、それらを別のサーバーに sftp したい。最初にそれらをファイルシステムに書きたくないのです。

代わりにファイルオブジェクトから読み取る方法はありますか?

0 投票する
2 に答える
1753 参照

python - pexpectで死にかけているプロセスをキャッチする

私は基本的にtelnet経由でコマンドを送信するいくつかのpexpectのものを書いています。

ただし、Telnetセッションが停止する可能性があります(ネットワークの問題、ケーブルの引っ張りなどが原因)。

telnetセッションを初期化して、それが停止した場合にそれをキャッチして再接続するように指示し、それがあった場所でコードの実行を続行できるようにするにはどうすればよいですか。

これは可能ですか?

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

python - pexpect で子の stdin と stderr をスキップする

を使用して子プロセスを制御していますpexpect( subprocess pty をサポートしておらず、2 つのパイプでデッドロックが発生したため)。このプロセスは に多くの出力を作成しますが、stderrこれには興味がありませんpexpectstdin

どうすればこれをオフにできますか?

0 投票する
2 に答える
147 参照

functional-programming - オブジェクトではなく関数を抽象化するエレガントな方法は何ですか?

telnet/pexpect を介してセンサーにログインし、データ コレクターとして機能する機能があります。

ログインし、データを取得し、そこから関連する出力を解析する部分 (pexpect) を書き直したくありません。ただし、このコードとそれが収集するデータで別のことを行う必要があります

たとえば、次のことが必要になる場合があります。

  • 最初の読み値が返るまでの時間

  • さまざまな数のセンサー読み取り値の平均を取る

  • ステータス (1 つのデータ) を返すか、出力からセンサーの読み取り値 (別のデータ) を返します。

最終的には、同じようにログインして出力を解析する必要があり、その部分に 1 つのコード ブロックを使用したいと考えています。

コードの上位では、瞬時に使用されています。それを呼び出すと、収集する必要があるデータの種類がわかり、それだけです。オブジェクトの構築はあまりにも不器用です。

私の使用法は、単一の関数に引数を追加するよりも優れています。

何か案は?

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

regex - strip() がこの pexpect スクリプトを修正するのはなぜですか?

私はオブジェクトを持っています。

このオブジェクトにはconnect()、pexpect プロセスを生成するメソッドがあります。

生成されるプロセスは、カスタム シリアル インターフェイスです。このツールを起動すると、次のように、接続するシリアル デバイスのメニューが出力されます。

/blockquote>

Myconnect()は、指定されたデバイス名に基づいて渡す​​番号を決定します (例: 'acFX9DQf'): (self.connection は pexpect spawn です)

さて、私の問題は、私connect()/kill()プロセスがメインロジックで複数回実行され、そのうちの1つで予期せず例外connect()をスローすることがあるということです。pexpect.TIMEOUT

たとえば、次のデバッグ ステートメントをロジックに追加すると、次のようになります。

...次の多くの呼び出しに対してこの出力を取得しますconnect()

/blockquote>

...すると、私のconnect()呼び出しの 1 つが予期せず実行されます....

/blockquote>

しかし、コードを次のように修正すると:

私の問題はなくなります!繰り返し実行できますが、問題は発生しません。例外も何もありません。

一体、ここで何が起こっているのですか?この問題をどこから始めればよいかさえわかりません。

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

python - Python: ソケット: セル ネットワークを介した TCP 接続の処理

私はPythonでいくつかのソケットプログラミングを行っており、低速の組み込みデバイスと通信するためにクライアントTCP / IPソケットを開発しています。そのため、応答が 1 つのパッケージのみであると想定されている場合でも、2 つのパッケージに分割されることがあります。それに対する私の現在の解決策は、sleep()必要なすべてのデータが既に到着していることを確認するのを待って、python プログラムを使用することです。

この状況を処理するためのより良い方法があるかどうか疑問に思っていますか?

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

python - ブロッキングせずにsshを介してTCPポートをトンネリング

次のコードを使用して、pexpectを介してsshトンネルをセットアップしようとしています。

私が期待しているのは、パスワードが送信されてsshトンネルが確立された後、whileループが終了して、他のビジネスロジックで処理を続行できるようにすることです。

ただし、上記のコードは、sshトンネルが確立されている場合、utilタイムアウト(約30秒)をブロックします。

ブロックを回避する方法について誰かアドバイスをいただけますか?

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

python - pexpect ssh がコマンド オプションを処理できない

pexpect ssh を使用してコンパイル用のスクリプトを書き留めています。ssh の自動化は次のようになります。

ここで、cmd は次のとおりです。

問題が発生するのは、

一方、commands.getoutput を使用して同じコマンドを実行すると、正しく実行されます。

この種のエラーが生成される問題は何ですか?また、どうすればこれを根絶できますか?

前もって感謝します :)

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

python - Pexpect を使用したコマンドラインによる Python と Fortran のインターフェース

私は python で pexpect を使用して、ユーザーが Web サイトを介して FORTRAN プログラムと対話できるようにするプログラムを作成しています。FORTRAN プログラムから、次のエラーが表示されます。

私がしようとすると:

私の理解では、55 を間違った入力ユニットに送信している可能性があります。Python で pexpect を使用して FORTRAN プログラムに入力を正しく送信するにはどうすればよいですか?

ありがとうございました。


編集: p.sendline のパラメーターが空 (egpsendline()) の場合、またはスペースのみが含まれている場合、プログラムは期待どおりに処理されます。スペース以外の値を FORTRAN プログラムに送信する場合、何らかの方法で入力形式を指定する必要がありますか?