問題タブ [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.
ruby - Linux PTY 上の Ruby は EOF なしで終了し、Errno::EIO が発生します
ファイルを受け取り、そのファイルをいくつかのバイナリの 1 つに渡して処理し、変換プロセスのエラーを監視するコードを書いています。OSX で次のルーチンを作成してテストしましたが、Linux では不明な理由で失敗します。
実行されるコマンドはさまざまで、## マークのコードは、問題をデバッグするためにローカル エコーに単純化されています。コマンドが実行され、スクリプトはターミナルに予期される出力を出力してから、例外をスローします。
Debian システムで生成されるエラーは次のとおりです。 Errno::EIO (Input/output error - /dev/pts/0):
私が思いついたすべてのコマンド文字列はそのエラーを生成し、ローカル エコー ブロックなしでコードを実行すると、問題なく実行されます。
どちらの場合でも、コマンド自体は正常に実行されますが、debian linux が eof を pty に送信していないようです。PTY のドキュメント ページと ruby-doc の IO は、ここでは何の助けにもならないようです。
助言がありますか?ありがとう。
-vox-
linux - (sshを介して)ptyを使用し、より多くの場所に配管する場合の階段
これは私を悩ませてきた問題であり、解決策を見つけることができません。私のプログラム:
とのよう~/severalLineFile
にanotherhost
見えます:
プログラムを単独で実行すると、端末への出力は期待どおりに見えます。ただし、ターミナルのサイズを5行だけになるように変更し、プログラムをそれ以下にパイプすると、次のようになります。
その時点でスペースバーを押すと、次のように印刷されますline5
(line6
および追加の行)。
これは、疑似端末でsshを実行した結果であり、改行が改行に含まれているためにこの階段状のステップが発生することを理解しました。私は使ってみましstty ocrnl
たが、これは私が望むことをしません。つまり、スペースバーを押した後、lessの最初の印刷がすべてのように動作するためです。
ところで、すべてのキーボード割り込みがリモートプロセスに到達するようにしたいので、モードssh
で実行する必要があります。物事のこちら側に解決策があれば、私はすべての耳です。私はLinuxServer6.1を使用しており、端末はMacOS10.6.8を使用しています。-t
ctrl+C
\r\n
また、疑似端末が生成するをに置き換えようとしました\n
が、これでは問題は解決しません。
python - RSAキーなしでpythonを使用したssh
Stackoverflow は初めてなので、まずはこんにちは。
私は、オープン ソースの Unison プログラム用のカスタム GUI (私は Python を使用したことがないので、教育上の課題として Python で作成されたもの) であるはずの私の学校の小さなプロジェクトに取り組んでいます。できるだけ少ない入力でこのプログラムを起動することにより、学生とスタッフが自宅と学校のフォルダーを同期できるようにしています (必要に応じて馬鹿を証明します)。インターフェースは学校のユーザー名とパスワードだけであると想定されており、GUI ラッパーはユーザー名とパスワードを Unison に送信して同期するだけです。
問題は、Unison が順番に SSh を起動してパスワードを要求することですが、python subprocess.communicate(input) メソッドでは ssh にパスワードを取得させません。ssh は端末からの入力のみを受け入れることに気付きましたが、それをだます方法がわかりません。疑似端末の使用についていくつか読んだことがありますが、まだ困惑しています。RSAキーは理想的なソリューションですが、それらを生成してリモートサーバーに配置するには、少なくとも1回はパスワードでログインする必要があり、それには上記のソリューション、またはばかではない端末が必要です。
実行文字列を貼り付けると、そこの端末で正常に機能します。また、一般的な Python のヒントもあれば、それも歓迎します。
ありがとう!
Unison ユーザーマニュアル: http://www.cis.upenn.edu/~bcpierce/unison/download/releases/stable/unison-manual.html
編集: また、現在 OSX と Linux で開発を行っていますが、学校のほとんどの生徒がプライマリ (または唯一の) マシンとして Windows を実行しているため、最終的にはこの Windows を互換性のあるものにする必要があることに注意してください。
linux - pty ファイル記述子の読み取りタイムアウトが失敗しました
PTY を表すファイル記述子に読み取りタイムアウトを設定しようとしています。VMIN = 0 と VTIME = 10 を termios に設定しました。これは、文字が利用可能になったときに返されるか、文字が利用できない場合は 1 秒後に返されることを期待しています。ただし、私のプログラムは読み取り呼び出しに永遠に留まります。
これを機能させない PTY の特別な点はありますか? これを機能させる他の TERMIOS 設定はありますか? stdin ファイル記述子でこれと同じ構成を試したところ、期待どおりに機能しました。
java - PTYを使用してScalaでプロセスを生成する方法は?
ルビーで私は持っています:
これはscala/javaでどのように行いますか?
python - 出力をキャプチャするときにサブプロセスを select および pty で使用するとハングする
他のプログラムと対話できる python プログラムを作成しようとしています。これは、stdin を送信し、stdout データを受信することを意味します。pexpect を使用することはできません (ただし、デザインの一部に影響を与えたことは間違いありません)。私が現在使用しているプロセスは次のとおりです。
- サブプロセスの stdout に pty をアタッチします
- チェックしてサブプロセスが終了するまでループします
subprocess.poll
- stdout に利用可能なデータがある場合、そのデータを現在の stdout にすぐに書き込みます。
- 終了!
私は動作するいくつかのコード (以下) のプロトタイプを作成していますが、私を悩ませている 1 つの欠陥があるようです。使用時にタイムアウトを指定しないと、子プロセスが完了した後、親プロセスがハングしますselect.select
。タイムアウトを設定したくないのです。少しだけ汚れているようです。ただし、この問題を回避するために私が試みた他のすべての方法は機能していないようです。Pexpect は、 and の代わりに and を使用して、私が好まないソリューションを使用することで回避してos.execv
いるpty.fork
ようsubprocess.Popen
ですpty.openpty
。サブプロセスの寿命をチェックする方法に何か問題がありますか? 私のアプローチは間違っていますか?
私が使用しているコードは以下のとおりです。私はこれを Mac OS X 10.6.8 で使用していますが、Ubuntu 12.04 でも動作させる必要があります。
これはサブプロセスランナーrunner.py
です:
これはサブプロセス コードoutputter.py
です。奇妙なランダム部分は、ランダムな間隔でデータを出力するプログラムをシミュレートするためのものです。必要に応じて削除できます。それは問題ではありません:
皆様のご協力に感謝いたします。
追記
stdout がバッファリングされないようにするため、pty が使用されます。
c - ssh セッション内から疑似端末マスター ファイル記述子を取得する方法は?
Cまたはbashで、
可能であれば、sshセッション内から、そのセッションのスレーブ(pts)への入力を担当する疑似端末マスターへのファイル記述子をどのように取得するのか疑問に思っていました。
sftp - sshpassがエラーをスローします'疑似端末の取得に失敗しました:成功'
sshpassツールを実行してsftpアクションを自動化しようとしています。
別のサーバーでは、コマンドは機能しますが、このサーバーでは、1行のエラーメッセージを返すだけです。
これが私が使用しているコマンドです:
そして、私はエラーを受け取ります:
私は多くの異なるホストでrootユーザーとしてそれを試しましたが、問題なくsftpで接続できるので、sshpassまたは疑似端末の問題であると確信しています。
疑似端末についてはよくわからないので、エラーについて何も見つからないようです。/ dev / ptsフォルダーは空で、cat / proc / sys / kernel / pty / nrは0です。これは、実行中のフォルダーがないことを意味すると思います。ptya0からptyzfまでの256個のpty**アイテムがあり、疑似端末の数の制限に達した可能性があると私は信じています。私の最大端末(cat / proc / sys / kernel / pty / maxを見ると)は4096だと思います。
他の誰かがこのエラーを経験したか、何が間違っているのか知っていますか?これは実稼働サーバーであるため、ダウンする余裕はありません。これに関する助けをいただければ幸いです。
terminal - pty/N で端末サイズを変更できない (ttyN で動作)
次を使用して端末サイズを変更します。
rc = ioctl(fd, TIOCSWINSZ, &ws);
これを Linux テキスト端末 (Alt-Ctrl-F1 で切り替える) で実行すると、期待どおりの結果が得られます。ioctl syscall によって指定された範囲内の入力と出力全体。
しかし、SSH で localhost に接続して同じプログラムを実行すると、部分的にしか機能しません。つまり、ioctl で設定された端末サイズよりも広いコマンドを入力することはできませんが、出力は ioctl で指定された端末の境界を越えることができ、入力は ioctl で設定されたよりも多くの行を取ることができます。また、自動改行やその後の改行もありません。
プログラムを直接実行したときに表示される唯一の違いは、端末 /dev/ttyN で実行され、メジャー番号は 5 です。SSH 経由でプログラムを実行すると、端末として /dev/pts/N を使用し、メジャー番号は 136 です。ということで、端末の違いで発生することがわかりました。
私の質問:
1. それは正しいですか? 理由はターミナルドライバーにありますか?
2. どうすれば修正できますか? ローカル tty 端末のように、SSH 経由で同じ動作が必要です。
ありがとう!