問題タブ [pty]

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 投票する
3 に答える
2814 参照

python - Python で別のプログラムと対話するにはどうすればよいですか?

別のプログラムを実行し、別のプログラムの出力を読み取って操作する Python スクリプトを作成したいと考えています。問題は、このプログラムがパスワードの入力を求めるプロンプトを表示することです。パスワードを自動的に入力する方法がわかりません。(このスクリプトの目的上、パスワードがスクリプト自体にプレーンテキストで保存されているかどうかは問題ではありません。) 私がやりたいことは次のようなものです。

その結果、一部のプログラムで不要なパスワードプロンプトが表示され、プログラムの出力が戻り値として返されません。残念なことに、プログラムにはこのプロンプトをバイパスする方法がありません。

残念ながら、この問題を解決する方法については、いくつかの制限もあります。まず、私は Python 2.3 に固執しています (そのため、サブプロセス モジュールを使用できません)。次に、新しいモジュールをインストールできません (したがって、pexpect はありません)。幸いなことに、特に移植可能である必要はないので、Linux のみのソリューションで問題ありません。

必要なものを提供しているように見えるので、ptyモジュールを理解しようとしていますが、何時間も格闘した後、必要な方法で動作させる方法がわかりません。

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

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

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

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

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

python - 擬似端末マスターは、今書いたものを読み取ります

私は、シリアルポート接続を使用する「仮想デバイス」(pythonプロセス)を、シリアルポートも使用する実際のデバイスとインターフェイスするプロジェクトに取り組んでおり、疑似端末を使用して、これらのシリアルポートのいくつか(2つ以上)を接続しています通信プロセス(シリアルデバイスのモデリング)を一緒に行うと、ちょっとした問題にぶつかりました。

疑似端末を生成し、ptyのスレーブエンドをファイルにシンボリックリンクする(プロセスがファイル名にpyserialオブジェクトを作成できるようにする)Pythonプロセスがありますが、マスターエンドはpty生成プロセスによって保持されて読み取られます。1つのマスターにデータが入ると、データはログに記録されてから、他のマスターに書き込まれます。このアプローチは、リスニングプロセスが常に存在する場合に機能します。

問題は、仮想デバイスが停止するか、起動されない場合です(これは、このプロジェクトの有効なユースケースです)。私のシステムでは、データがptyのマスターエンドに書き込まれる場合、スレーブエンドをリッスンするものがない場合、そのマスターでreadを呼び出すと、書き込まれたばかりのデータが返されるようです。これは、デバイスが同じデータを複数回受信することを意味します-良くありません!

例:

スレーブがデータを送信するまで、read()ブロックを呼び出すことをお勧めします。実際、これはスレーブデバイスの動作です。書き込み可能であり、マスターがデータを書き込むまでos.read(slave、1)はブロックします。

私の「仮想デバイス」は、シリアルポートオブジェクトを開くためにファイル名を渡すことができる必要があります。マスターエンドをシンボリックリンクしようとしましたが、仮想デバイスが/ dev / ptmxを開くため、既存のスレーブにリンクする代わりに、新しい疑似端末ペアが作成されます。

マスターの動作を変更する方法はありますか?または、(/ dev / ptmxだけでなく)スレーブデバイスに対応するマスターへのファイル名を取得するだけでもかまいませんか?

前もって感謝します!

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

python - Python 端末エミュレーション

Python アプリ内で xterm 互換の仮想端末を実行したいと考えています。内部で ncurses ベースのアプリケーションを実行し、ユーザーの入力をフィードして出力を読み取る必要があります。

これまでのところ、python-vte を見つけましたが、GTK+ ウィジェットのみを提供し (libvte には必要な VtePty クラスがありますが、Python バインディングにはありません)、受け入れられない libgtk 依存関係があります。

Python で端末エミュレーションを実行する他の方法はありますか?

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

ruby - PTY.spawnで開かれたRubykill仮想シェル

rubyスクリプトでは、次のように、それぞれがシェルマネージャーオブジェクトによって管理される仮想シェルをさらに開始します。

後で、このインスタンスを破棄し、関連するシェルプロセスを強制終了したいと思います。悲しいことに、私は何も正しく動作させることができません。動作する確率の順に、私が試したことは次のとおりです。

  • 何もありません。つまり、管理オブジェクトが破棄されたときにシェルプロシージャが閉じられることを期待していません。
  • killコマンドを使用してシェルで実行されているすべてのプロセスを強制終了し(これは機能します)、次に。を使用してシェル自体を強制終了しsystem("kill #{@shell[2]")ます。これは効果がありません。
  • 上記で-9を使用します。これにより、シェルプロセスが機能しなくなります。

rubyプログラムが終了するとすべてのシェルが閉じられますが、プログラムを実行したままシェルを強制終了したいと思います。誰かが以前にこのようなものに遭遇しましたか?

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

python - Python:ブロックを回避するためにptyオブジェクトを覗く方法は?

pty次のようなプロセスの stdout をブロックしない読み取りに使用しています。

while-loop時々ブロックすることを除いて、すべて正常に動作します。これは、行print stdout.readline()が から何かが読み取られるのを待っているためですstdout。しかし、プログラムが既に終了している場合、そこにある私の小さなスクリプトは永遠にハングアップします。

私の質問は次のとおりです。stdoutオブジェクトを覗き込んで、読み取り可能なデータがあるかどうかを確認する方法はありますか? そうでない場合はwhile-loop、プロセスが実際にすでに終了していることを発見し、ループを中断するまで続行する必要があります。

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

c - マスターptyに書き込みますが、スレーブで読み取ることができません:(

プリミティブテストを書き込もうとしています。プログラムはtcp-serverを起動し、接続を受信し、受信したデータをフォークされたプログラムにリダイレクトする必要があります。コードは次のとおりです。

プログラムの出力:

要するに問題:サーバーはtcp-clientからデータを正常に受信し、それをマスターptyに書き込みますが、スレーブエンドはそれを受信しません。多くの例を見てきましたが、エラーは見られません。私に提案してください...

UPDint len = read(STDIN_FILENO, buf, sizeof(buf));の代わりに試しましたがexecvp、正常に動作します。エンターのようなコントロールシンボルを送る必要があると思います...何か考えはありますか?

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

unix - POSIX`パイプ`双方向

pipe(POSIX)を双方向に接続する方法で使用したいと思います。つまり、両端で読み書きできます。

それは可能ですか?

(4つのファイル記述子を持つ2つのパイプを作成したくありません。両端で読み取り/書き込みができるファイル記述子を2つだけにしたいのです。)

基本的に、それが失敗した場合のフォールバックである必要がありopenptyます。

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

unix - 別のプロセスの STDIO で「telnet」するにはどうすればよいですか?

通常、CouchDB は単純な回線ベースのプロトコルを介して STDIO を介してビュー サーバーと通信します。

私がやりたいことは、ビュー サーバーの代わりに、ある種のパイプまたは疑似端末に読み書きさせ、そこに接続してビュー サーバーを再生することです。

catそれを行う1つの方法は、FIFOを複雑に使用することだと思います。

しかし、Macでecho "hi" > /dev/ttys000端末に戻ってくることがわかったので、この方法で接続を確立できるはずだと思っていましたが、マンページから実際にそれを行う方法がわかりません。

【更新】writecouchから私の端末にメッセージを送信する を見つけたのですが、couchが接続されていないため、メッセージを返すことができません。

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

python - PythonのRuby用のpty.forkのようなものはありますか?

次のようなPythonコードをRubyに移植しようとしています。

ターミナルのようにサブプロセスの読み取りと書き込みを行う必要があるため、Kernel.forkの代わりにRubyのPTYモジュールを使用する必要があることを理解しています。しかし、同等のフォークメソッドはないようです。コマンドを文字列として渡す必要があります。これは、Pythonの機能に最も近いものです。

明らかに、その一部はLinux固有のものであり、それで問題ありません。そして明らかにいくつかは擬似コードですが、それは私が見つけることができる唯一のアプローチであり、とにかくそれが機能することを私は80%しか確信していません。確かにRubyにはもっときれいなものがありますか?

重要なのは、「get_command_based_on_user_input()」が親プロセスをブロックしないことです。そのため、子プロセスでスタックしました。