問題タブ [subprocess]
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 - WindowsのPythonサブプロセスにSIGINTを送信できますか?
Windowsでgdbプロセスを管理するPythonスクリプトがあり、ターゲットプロセス(gdbによって管理される)を停止するために、生成されたプロセスにSIGINTを送信できる必要があります。
Win32で使用できるのはSIGTERMだけのようですが、コンソールからgdbを実行してCtrl + Cを実行すると、明らかにSIGINTを受信していると見なされます。機能がすべてのプラットフォームで利用できるようにこれを偽造する方法はありますか?
(私はサブプロセスモジュールとpython 2.5 / 2.6を使用しています)
python - Pythonサブプロセスの質問
Pythonでプロセスを生成し、双方向の通信ができるようにしたいと思います。もちろん、Pexpectはこれを行い、実際に私が行くかもしれない方法です。ただし、それは完全に理想的ではありません。
私の理想的な状況は、標準のPythonライブラリのみを含むクロスプラットフォームの一般的な手法を使用することです。サブプロセスはかなり接近しますが、プロセスが安全に対話する前にプロセスが終了するのを待たなければならないという事実は望ましくありません。
ドキュメントを見ると、直接操作できるstdin、stdout、およびstderrファイル記述子があると書かれていますが、「これを行わないでください」という大きな警告があります。残念ながら、この警告が存在する理由は完全には明らかではありませんが、Googleから収集したものは、OSバッファリングに関連していることであり、これらの内部バッファが失敗したときに予期せずデッドロックするコードを記述できる可能性があります(補足として、間違った方法を示し、正しい方法をいただければ幸いです)。
したがって、コードを潜在的なデッドロックの危険にさらすと、ポーリングを使用するか、実行中のプロセスを強制終了せずにインタラクティブに読み取るように選択するのが面白いかもしれないと思いました。私はクロスプラットフォームの能力を失いますが(私は思う)、それが追加のライブラリを必要としないという事実が好きです。しかし、もっと重要なことは、これがこれが良い考えであるかどうかを知りたいです。私はまだこのアプローチを試していませんが、プログラムを破壊する可能性のある落とし穴について心配しています。それは動作しますか?何をテストする必要がありますか?
私の特定のケースでは、プロセスに書き込むことができるかどうかについてはあまり心配していません。プロセスから繰り返し読み取るだけです。また、プロセスが大量のテキストをダンプすることはないと思うので、デッドロックの問題を回避したいと思いますが、それらの制限が何であるかを正確に知り、それがどこで壊れているかを確認するためのテストを作成できるようにしたいと思います。
python - Python: サブプロセス内の永続的なシェル変数
Pythons subprocess モジュールを使用して一連のコマンドを実行しようとしていますが、実行する前に export でシェル変数を設定する必要があります。もちろん、シェルは永続的ではないように見えるので、後でコマンドを実行すると、これらのシェル変数は失われます。
これについて何か方法はありますか?/bin/sh プロセスを作成することはできますが、そのプロセスで実行されたコマンドの終了コードを取得するにはどうすればよいでしょうか?
timer - スレッド、サブプロセス、ゾンビ
スレッドと SSH を使用して、正確な瞬間にそれぞれ複数のリモート ジョブを起動する必要があります。だから私は書く:
コードは機能しますが、OS がゾンビでいっぱいになります。正直なところ、私は、communication() メソッドが子プロセスを処理し、その終了を待っていると信じていました。どこが間違っていますか?
python - 長時間実行サブプロセスの停止
長時間実行される subprocess.Popen() を使用してサブプロセスを作成します。独自のスレッドから呼び出され、サブプロセスが完了する/戻るまでスレッドはブロックされます。
サブプロセスを中断できるようにしたいので、必要なときにプロセスが終了します。
何か案は?
python - Python: サブプロセス モジュールを使用して、別のコマンドライン アプリケーションで読み書きできません
Windows で Python 3.0 を使用しており、コマンドライン アプリケーションのテストを自動化しようとしています。ユーザーは Application Under Test にコマンドを入力でき、出力が 2 つの XML パケットとして返されます。1 つはパケットで、もう 1 つはパケットです。これらのパケットを分析することで、結果を検証できます。私は以下のようにコードをahev
出力を戻すことができません。readline() を使用して出力を読み取ろうとした場所でスタックします。read() を試しましたが、それもスタックします
コマンドライン アプリケーションを手動で実行してコマンドを入力すると、出力が以下のように 2 つの xml パケットとして正しく返されます。
しかし、以下のように communicate() を使用すると、Sent パケットを取得し、Recv: パケットを取得しません。recv パケットが見つからないのはなぜですか? communicate(0 は stdout.rt?
動作するはずのサンプル コードを手伝ってくれる人はいますか? 別のスレッドで読み書きする必要があるかどうかはわかりません。私を助けてください。読み取り/書き込みを繰り返す必要があります。私が使用できるPythonの高度なレベルのモジュールはありますか。Pexpect モジュールが Windows で動作しないと思います
python - Python Popenの問題:ファイルが見つかりません
Pythonを使用してプログラムを実行しようとしています。
この小さなスニピットを実行すると、エラーが発生します。
WindowsError:[エラー2]システムは指定されたファイルを見つけることができません
プログラムが存在し、エクスプローラからexeへの絶対パスを直接コピーして貼り付けました。私は他のことを試しましたが、Pythonスクリプトを使用してEXEをソースフォルダーに配置し、「。/ sa.exe」を使用すると、機能することがわかりました。私が考えることができる唯一のことは、別のパーティション(F:)からPythonスクリプト(およびPython)を実行しているということです。
何か案は?ありがとう
python - 出力の大きいプロセスに subprocess.Popen を使用する
アプリの出力が少量の場合は正常に動作するが、出力が多い場合はハングする外部アプリを実行する Python コードがいくつかあります。私のコードは次のようになります:
ドキュメントには、潜在的な問題を示していると思われるコメントがあります。待機中は、次のとおりです。
警告: 子プロセスが
stdout
またはstderr
パイプに十分な出力を生成し、OS パイプ バッファーがさらにデータを受け入れるのを待機するのをブロックする場合、これはデッドロックになります。communicate()
それを回避するために使用します。
通信中ですが、次のように表示されます。
注 読み取ったデータはメモリにバッファリングされるため、データ サイズが大きい場合や無制限の場合は、このメソッドを使用しないでください。
したがって、大量のデータがある場合、これらのいずれかを使用する必要があるかどうかは不明です。その場合にどの方法を使用すべきかは示していません。
exec からの戻り値が必要であり、 と の両方を解析して使用しstdout
ますstderr
。
では、大きな出力を持つ外部アプリを実行するための Python での同等の方法は何でしょうか?
python - Python でサブプロセスを使用したプロセスからのバッファリングされていない読み取り
長くて時間のかかる出力を生成するプロセスから読み取ろうとしています。ただし、生成されたときに出力をキャッチしたいと思います。しかし、次のようなものを使用すると、コマンドの出力がバッファリングされているように見えるため、出力行を一度に取得することになります。
MacOS 10.5でこれを試しています
python - タイムアウト付きのモジュール「サブプロセス」の使用
データを返す任意のコマンドを実行するstdout
か、ゼロ以外の終了コードで例外を発生させるPythonコードは次のとおりです。
communicate
プロセスが終了するのを待つために使用されます:
モジュールはタイムアウト(subprocess
X秒を超えて実行されているプロセスを強制終了する機能)をサポートしていないため、communicate
実行に永遠にかかる場合があります。
WindowsとLinuxで実行することを目的としたPythonプログラムでタイムアウトを実装する最も簡単な方法は何ですか?