問題タブ [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上のPython2.6:「shell = True」引数でsubprocess.Popenを終了する方法は?
「shell」引数を「True」に設定してsubprocess.Popenクラスで開始されたプロセスを終了する方法はありますか?以下の最小限の例(wxPythonを使用)では、メモ帳プロセスを開いて終了できますが、Popenの「shell」引数を「True」に変更してもメモ帳プロセスは終了しません。
この質問のために、「シェル」は「真」と等しくなければならないことを受け入れてください。
python - ループ内の subprocess.Popen(...) への呼び出しから出力を出力するにはどうすればよいですか?
さまざまな入力引数を指定してコマンドライン プログラムを実行し、出力から特定の行を取得するスクリプトを作成しました。以下をループで実行しています。
1 つの問題は、ループの実行が終了した後にしか出力がないことです。プロセスが終了するたびに何かを印刷したい。どうやってやるの?
また、p1 の出力を表示するオプションが必要です。しかし、p2を壊さずにp1.stdout.readlines()でそれをつかむことはできません。これどうやってするの?
grep を呼び出して p1 の出力を保存し、フレーズを検索することはできないと思っていましたが、出力が多いため、この方法はかなり非効率的です。
どんな提案でも大歓迎です。ありがとう!
python - Python の subprocess.Popen は、同じ stdout を返すべきではありませんが、返します
Python の subprocess.Popen で非常に奇妙な問題が発生しています。私はそれを使用して外部exeを数回呼び出し、出力をリストに保持しています。
この外部 exe を呼び出すたびに、異なる文字列が返されます。ただし、Popen を使用して何度か呼び出すと、常にSAME string が返されます。=:-O
exeをリコールせずに、Popenがstdoutから常に同じ値を返しているようです。実際にexeを再度呼び出さずに、ある種のキャッシュを実行している可能性があります。
これは私のコードです:
いったい私は何を間違っているのでしょうか?!
python - 標準入力パイプを使用した Windows コンソール アプリの制御
subprocess モジュールを使用して Python からコンソール アプリケーション (Segger の JTAG アプリ) を制御しようとしています。アプリケーションは stdout に対して正しく動作しますが、stdin は読み取られないようです。シェルを有効にすると、入力に入力してアプリケーションを制御できますが、これはプログラムで行う必要があります。同じコードは、cmd.exe などにコマンドを発行する場合に問題なく機能します。
標準入力ではなくキーボードが直接読み取られていると思います。アプリケーション入力を送信する方法はありますか?
python - 大規模プロジェクトの立ち上げ/デバッグをどのように自動化していますか?
シナリオ:
手で起動するのが面倒な複雑なソフトウェアがあります。私が行ったことは、実行可能ファイルを起動し、デバッグ用にgdbをアタッチするための Python スクリプトを作成することです。
プロセス起動スクリプト:
- 環境変数が設定されていることを確認します。
- ローカルのビルド ディレクトリが環境
LD_LIBRARY_PATH
変数に追加されるようにします。 - 現在の作業ディレクトリを実行可能ファイルが期待する場所に変更します(私の設計ではありません)
- 唯一のコマンドラインオプションである構成ファイルを使用して実行可能ファイルを起動します
- 実行可能ファイルからの出力を 2 番目のロギング プロセスにパイプします
- 実行可能ファイルの PID を記憶し、実行中の実行可能ファイルに gdb を起動してアタッチします。
スクリプトは機能しますが、1 つの注意点があります。ctrl-c はデバッグ対象を中断せず、制御を gdb に戻します。したがって、アクティブなブレークポイントなしで「続行」すると、プロセスを再び停止することはできず、別のシェルから強制終了/中断する必要があります。ところで、「kill -s SIGINT <pid>」を実行すると、<pid> はデバッグ対象の pid に戻りますが、gdb のプロンプトに戻ります...しかし、このようにしなければならないのは本当に面倒です
最初は、Python が SIGINT シグナルを取得していると思っていましたが、シグナル ハンドラーをセットアップしてシグナルをデバッグ対象に転送しても問題が解決しないため、そうではないようです。
私はpythonスクリプトにさまざまな構成を試しました(サブプロセスの代わりにos.spawn *を呼び出すなど)。pythonが子プロセスを起動した場合、SIGINT(ctrl-c)シグナルはしないようですgdb または子プロセスにルーティングされます。
現在の考え方
- これは、debugee と gdb に別のプロセス グループ ID が必要なことに関連している可能性があります...これに対する信憑性はありますか?
- SELinux のバグの可能性はありますか?
情報:
- gdb 6.8
- Python 2.5.2 (Python 2.6.1 にも存在する問題)
- SELinux 環境 (プロセスにシグナルを配信するバグ?)
私が検討した代替案:
- .gdbinit ファイルを設定して、スクリプトが行うことと同じように行うこと、環境変数、および現在の作業ディレクトリがこのアプローチの問題です。
- 実行可能ファイルを起動し、gdb を手動でアタッチする (yuck)
質問: 大規模プロジェクトの起動/デバッグをどのように自動化しますか?
更新: 以下の Nicholas Riley の例を試してみました。自宅の Macintosh では、すべて cntl-c がさまざまな程度で機能しますが、製品の boxen (SELinux を実行していると思われる) では動作しません...
python - Python で親プロセスの死を検出する子プロセス
親プロセスが終了したかどうかを Python の子プロセスが検出する方法はありますか?
python - サブプロセスの「シェル」引数は、Windows で何を意味しますか?
subprocess モジュールのドキュメントには、「シェルが True の場合、指定されたコマンドがシェルを通じて実行される」と記載されています。これは実際には、Windows OS 上で何を意味するのでしょうか?
python - Pythonサブプロセス「オブジェクトに属性'fileno'がありません」エラー
このコードは、Python 2.5.1で実行すると、「AttributeError:'Popen'オブジェクトには属性'fileno'がありません」を生成します。
コード:
スタック:
このコードは、この使用法を説明しているPythonドキュメントで機能しているはずです。
python - サブプロセスを使用してリアルタイム出力を取得する
コマンド ライン プログラム (svnadmin verify) のラッパー スクリプトを作成しようとしています。これには、ラップされたプログラムが出力されるとすぐに、出力の各行を確認できる必要があります。
subprocess.Popen
、 useを使用してプログラムを実行し、stdout=PIPE
各行が入ってくるたびに読み取り、それに応じて行動するだけだと考えました。ただし、次のコードを実行すると、出力がどこかにバッファリングされているように見え、1 行目から 332 行目、333 行目から 439 行目 (出力の最後の行) の 2 つのチャンクに出力が表示されました。
subprocess のドキュメントを少し見たところ、bufsize
パラメータがPopen
にあることがわかりました。そのため、bufsize を 1 (行ごとにバッファリングする) と 0 (バッファなし) に設定してみましたが、どちらの値でも行の配信方法が変わるようには見えませんでした。
この時点で、私はストローをつかみ始めていたので、次の出力ループを書きました。
しかし、同じ結果が得られました。
サブプロセスを使用して実行されたプログラムの「リアルタイム」プログラム出力を取得することは可能ですか? Python に前方互換性がある (ないexec*
) 他のオプションはありますか?
python - 複数の引数にスペースが含まれている場合にサブプロセスを使用する方法は?
仮想マシンの起動/シャットダウン/登録/登録解除アクションの自動化を可能にする、vmware 実行可能ファイルを実行するラッパー スクリプトに取り組んでいます。サブプロセスを使用して実行可能ファイルの呼び出しを処理しようとしていますが、実行可能ファイルのパスと実行可能ファイルのパラメーターのスペースがサブプロセスによって正しく処理されていません。以下はコードの一部です。
vm_list2 関数を呼び出すと、次の出力が得られます。
path-to-vm パラメーターを必要とする vm_start 関数を呼び出すと、次の出力が得られます。
どうやら、スペースが埋め込まれた 2 番目のパラメーターの存在は、サブプロセスが最初のパラメーターを解釈する方法を変更しています。これを解決する方法について何か提案はありますか?
python2.5.2/cygwin/winxp