問題タブ [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 - サブプロセスから「リアルタイム」情報を取得するにはどうすればよいですか。Python(2.5)のPopen
サブプロセスモジュールを次のように使用したいと思います。
- 実行に時間がかかる可能性のある新しいプロセスを作成します。
- キャプチャ
stdout
(またはstderr
、あるいは両方、一緒にまたは別々に) - サブプロセスからのデータを受信時に処理します。おそらく、受信したすべての行でイベントを発生させるか(wxPythonなど)、または単に今のところそれらを出力します。
Popenを使用してプロセスを作成しましたが、communicate()を使用すると、プロセスが終了すると、データが一度に届きます。
(を使用して)ブロッキングを行う別のスレッドを作成するとreadline()
、プロセスが終了するまで、このメソッドでも行を取得できません。(bufsizeとして何を設定しても)myprocess.stdout
stdout = subprocess.PIPE
恐ろしくなく、複数のプラットフォームでうまく機能するこれに対処する方法はありますか?
python - subprocess.Popen から返されたファイル ハンドルをポーリングする方法はありますか?
私がこれを書いたとしましょう:
今私がするなら
私のプログラムは、サブプロセスが次の行を出力するまで待機します。
出力がある場合は出力を読み取ることができるようにするためにできる魔法はありますp.stdout
が、それ以外の場合は続行しますか? 私は次のようなものを探していますQueue.get_nowait()
を読み取るためのスレッドを作成できることはわかってp.stdout
いますが、新しいスレッドを作成できないと仮定しましょう。
python - マルチプロセッサシステムで並列子プロセスを生成する方法は?
別の Python スクリプトのコントローラーとして使用したい Python スクリプトがあります。私は 64 個のプロセッサを搭載したサーバーを持っているので、この 2 番目の Python スクリプトの最大 64 個の子プロセスを生成したいと考えています。子スクリプトは次のように呼び出されます。
NAME は、XYZ、ABC、NYU などのようなものです。
私の親コントローラー スクリプトでは、リストから name 変数を取得します。
私の質問は、これらのプロセスを子として生成する最良の方法は何ですか? 一度に子の数を 64 に制限したいので、ステータス (子プロセスが終了したかどうか) を追跡して、世代全体を効率的に実行し続けることができるようにする必要があります。
subprocess パッケージの使用を検討しましたが、一度に 1 つの子しか生成しないため、拒否しました。ようやくマルチプロセッサ パッケージを見つけましたが、スレッド全体とサブプロセスのドキュメントに圧倒されたことを認めます。
現在、私のスクリプトはsubprocess.call
、一度に 1 つの子のみをスポーンするように使用しており、次のようになっています。
一度に 64 人の子供を産み出したいのです。他のスタック オーバーフローの質問で、人々が Queue を使用しているのを見ましたが、それはパフォーマンス ヒットを生み出すように見えますか?
python - Python OSError: [Errno 2]
Linuxで以下の各「コマンド」を開始しようとしている次のコードがあります。何らかの理由でいずれかがクラッシュした場合、モジュールは 2 つのコマンドのそれぞれを実行し続けようとします。
コードを実行すると、次の例外がスローされます。
明らかな何かが欠けていると思いますが、上記のコードの何が問題なのか誰にもわかりますか?
python - サブプロセスを使用してWindowsでPythonスクリプトを実行する
Windows / Linux / OS XでPythonスクリプトを実行する簡単な方法はありますか?
後者の2つではsubprocess.Popen("/the/script.py")
機能しますが、Windowsでは次のエラーが発生します。
monkutのコメント:ユースケースは明確ではありません。なぜサブプロセスを使用してPythonスクリプトを実行するのですか?スクリプトをインポートして必要な関数を呼び出すのを妨げるものはありますか?
Pythonコマンドラインツールの全体的な機能をテストするための簡単なスクリプトを書いていました(さまざまなプラットフォームでテストするため)。基本的に、一時フォルダーに多数のファイルを作成し、これに対してスクリプトを実行して、ファイルの名前が正しく変更されていることを確認する必要がありました。
スクリプトをインポートして関数を呼び出すこともできましたが、それはに依存しsys.argv
て使用するsys.exit()
ため、次のようなことを行う必要がありました。
また、何か問題が発生した場合に備えて、デバッグ用にstdoutとstderrをキャプチャしたいと思いました。
もちろん、より良い方法は、よりユニットテスト可能な方法でスクリプトを書くことですが、スクリプトは基本的に「完了」しており、「1.0」リリースを実行する前にテストの最終バッチを実行しています(その後、書き直し/再構築を行うため、これははるかに整然としていて、よりテスト可能になります)
sys.executable
基本的に、変数を見つけた後、スクリプトをプロセスとして実行する方がはるかに簡単でした。私はそれをシェルスクリプトとして書いたでしょうが、それはクロスプラットフォームではなかったでしょう。最終的なスクリプトはここにあります
python - python subprocess.Popen(command, stderr=subprocess.PIPE, stdout=subprocess.PIPE) から stderr をキャプチャします。
これがここに何度も投稿されているのを見てきました。コマンドから意図的なエラーをキャプチャできませんでした。これまでに見つけた最高の部分作業..
python - 子プロセスの stdout 出力をキャプチャするにはどうすればよいですか?
Python でプログラムを作成しようとしていますが、.exe ファイルを実行するように指示されました。この .exe ファイルを実行すると、大量のデータが出力されるため、特定の行を画面に出力する必要があります。または同様のものを使用する必要があると確信していますsubprocess.popen
が、サブプロセスは初めてで、手がかりがありません。これを行う簡単な方法はありますか?
python - Python とサブプロセス
これは、私が取り組んでいるスクリプト用です。以下のループでは、.exe ファイルを実行することになっています。(ちなみに、表示されているかどうかはわかりませんが、 el in ('90','52.6223',...) はループの外側にあり、残りとネストされたループを作成します)順序が正しいかどうかはわかりませんなんてことはない。また、.exeファイルが実行されると、いくつかのものが吐き出され、画面に特定の行を出力する必要があります(したがって、 AspecificLinfe= ... が表示される場所)。役に立つ答えは素晴らしいでしょう!
python - Python 2.6 subprocess.call() は、Perl の汚染チェックをトリガーする setgid 動作を呼び出しているようです。どうすれば解決できますか?
Python の subprocess.call() と os.system() の間に奇妙な動作の違いがあり、setgid に関連しているようです。違いは、subprocess.call() が使用されたときに Perl の汚染チェックが呼び出されることです。これは、汚染を除去するコードを追加する必要があるすべての Perl スクリプトを変更する能力がないため、問題を引き起こします。
例、「process.py」
「サブプロセス.pl」
出力 - subprocess.pl の両方の実行は同じである必要がありますが、subprocess.call() で実行されたものは汚染エラーを取得します:
os.system() の使用は機能しますが、subprocess.check_call() を使用する方がより前方互換性が高く、優れたチェック動作を備えているため、実際には subprocess.check_call() を使用したいと思います。
これら 2 つが異なる理由を説明する提案やドキュメントはありますか? これは、これらの動作を呼び出しているローカル UNIX 環境の奇妙な設定である可能性はありますか?
python - サブプロセスの呼び出し中に、厄介なエラー ポップアップを表示して OS に処理させるのではなく、Python で重大な Windows エラーをキャッチします。
「アプリケーションを正しく初期化できませんでした... [OK] をクリックして、アプリケーションを終了してください。」エラーポップアップからのメッセージです。Python コードでこれらのエラーをキャッチする方法は何ですか?