1. ホーム
  2. python

[解決済み] subprocess.Popen 呼び出しの出力を文字列で保存する [重複] 。

2022-03-14 15:40:57

質問

Pythonでシステムコールを行い、その出力をPythonプログラムで操作できるような文字列に保存しようとしているのです。

#!/usr/bin/python
import subprocess
p2 = subprocess.Popen("ntpq -p")

ここにある提案を含め、いくつかのことを試してみました。

subprocess.call()の出力を取得する

が、うまくいかない。

どうすればいいですか?

Python 2.7 または Python 3 の場合

を作るのではなく Popen オブジェクトを直接使用することができます。 subprocess.check_output() 機能 で、コマンドの出力を文字列で保存します。

from subprocess import check_output
out = check_output(["ntpq", "-p"])

Python 2.4-2.6では

を使用します。 communicate メソッドを使用します。

import subprocess
p = subprocess.Popen(["ntpq", "-p"], stdout=subprocess.PIPE)
out, err = p.communicate()

out が欲しいところです。

他の回答についての重要な注意事項

コマンドの渡し方に注目してください。その "ntpq -p" の例では、もう一つの問題が出てきます。というのも Popen はシェルを起動しないので、コマンドとオプションのリストを使います。 ["ntpq", "-p"] .