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

0 投票する
4 に答える
61268 参照

python - マルチプロセッサシステムで並列子プロセスを生成する方法は?

別の Python スクリプトのコントローラーとして使用したい Python スクリプトがあります。私は 64 個のプロセッサを搭載したサーバーを持っているので、この 2 番目の Python スクリプトの最大 64 個の子プロセスを生成したいと考えています。子スクリプトは次のように呼び出されます。

NAME は、XYZ、ABC、NYU などのようなものです。

私の親コントローラー スクリプトでは、リストから name 変数を取得します。

私の質問は、これらのプロセスを子として生成する最良の方法は何ですか? 一度に子の数を 64 に制限したいので、ステータス (子プロセスが終了したかどうか) を追跡して、世代全体を効率的に実行し続けることができるようにする必要があります。

subprocess パッケージの使用を検討しましたが、一度に 1 つの子しか生成しないため、拒否しました。ようやくマルチプロセッサ パッケージを見つけましたが、スレッド全体とサブプロセスのドキュメントに圧倒されたことを認めます。

現在、私のスクリプトはsubprocess.call、一度に 1 つの子のみをスポーンするように使用しており、次のようになっています。

一度に 64 人の子供を産み出したいのです。他のスタック オーバーフローの質問で、人々が Queue を使用しているのを見ましたが、それはパフォーマンス ヒットを生み出すように見えますか?

0 投票する
6 に答える
96014 参照

python - Python OSError: [Errno 2]

Linuxで以下の各「コマンド」を開始しようとしている次のコードがあります。何らかの理由でいずれかがクラッシュした場合、モジュールは 2 つのコマンドのそれぞれを実行し続けようとします。

コードを実行すると、次の例外がスローされます。

明らかな何かが欠けていると思いますが、上記のコードの何が問題なのか誰にもわかりますか?

0 投票する
8 に答える
122999 参照

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基本的に、変数を見つけた後、スクリプトをプロセスとして実行する方がはるかに簡単でした。私はそれをシェルスクリプトとして書いたでしょうが、それはクロスプラットフォームではなかったでしょう。最終的なスクリプトはここにあります

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

python - python subprocess.Popen(command, stderr=subprocess.PIPE, stdout=subprocess.PIPE) から stderr をキャプチャします。

これがここに何度も投稿されているのを見てきました。コマンドから意図的なエラーをキャプチャできませんでした。これまでに見つけた最高の部分作業..

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

python - 子プロセスの stdout 出力をキャプチャするにはどうすればよいですか?

Python でプログラムを作成しようとしていますが、.exe ファイルを実行するように指示されました。この .exe ファイルを実行すると、大量のデータが出力されるため、特定の行を画面に出力する必要があります。または同様のものを使用する必要があると確信していますsubprocess.popenが、サブプロセスは初めてで、手がかりがありません。これを行う簡単な方法はありますか?

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

python - Python とサブプロセス

これは、私が取り組んでいるスクリプト用です。以下のループでは、.exe ファイルを実行することになっています。(ちなみに、表示されているかどうかはわかりませんが、 el in ('90','52.6223',...) はループの外側にあり、残りとネストされたループを作成します)順序が正しいかどうかはわかりませんなんてことはない。また、.exeファイルが実行されると、いくつかのものが吐き出され、画面に特定の行を出力する必要があります(したがって、 AspecificLinfe= ... が表示される場所)。役に立つ答えは素晴らしいでしょう!

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

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 環境の奇妙な設定である可能性はありますか?

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

python - サブプロセスの呼び出し中に、厄介なエラー ポップアップを表示して OS に処理させるのではなく、Python で重大な Windows エラーをキャッチします。

「アプリケーションを正しく初期化できませんでした... [OK] をクリックして、アプリケーションを終了してください。」エラーポップアップからのメッセージです。Python コードでこれらのエラーをキャッチする方法は何ですか?

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

python - スレッドからの Python Subprocess.Popen

スレッド内でサブプロセス モジュールと Popen を使用して「rsync」を起動しようとしています。rsync を呼び出した後、出力も読み取る必要があります。出力を読み取るために、communication メソッドを使用しています。スレッドを使用しない場合、コードは正常に実行されます。スレッドを使用すると、通信呼び出しでハングするようです。私が気付いたもう 1 つのことは、shell=False を設定すると、スレッドで実行しているときに通信から何も返されないことです。

0 投票する
4 に答える
18794 参照

python - 非表示ウィンドウを使用したクロスプラットフォーム サブプロセス

バックグラウンドでプロセスを開いて対話したいのですが、このプロセスは Linux と Windows の両方で非表示にする必要があります。Windows では、STARTUPINFO を使用していくつかのことを行う必要がありますが、これは Linux では有効ではありません。

ValueError: startupinfo は Windows プラットフォームでのみサポートされています

OSごとに個別のPopenコマンドを作成するより簡単な方法はありますか?