5

以下のスクリプトを使用して check_output の使用法をチェックしようとしていますが、コンパイル エラーが発生しました。どこが間違っているのでしょうか?

import os
import subprocess
from subprocess import check_output

#result = subprocess.check_output(['your_program.exe', 'arg1', 'arg2'])
SCRIPT_ROOT=subprocess.check_output(["pwd","shell=True"])
print SCRIPT_ROOT

def main ():
    pass

if __name__ == '__main__':
    main()

Traceback (most recent call last):
  File "test.py", line 3, in <module>
    from subprocess import check_output
ImportError: cannot import name check_output
4

2 に答える 2

10

check_outputPython2.7で導入されました。以前のバージョンのPythonを使用している場合は、そこにありません。

別の方法はを使用することPopenです。

output = subprocess.Popen(['pwd'], stdout=subprocess.PIPE).communicate()[0]

これの証拠はここで見つけることができます。

新しい関数:サブプロセスモジュールのcheck_output()は、指定された引数のセットを使用してコマンドを実行し、コマンドがエラーなしで実行された場合はコマンドの出力を文字列として返します。それ以外の場合は、CalledProcessError例外を発生させます。

代替品のデモ。

import subprocess
cmd = subprocess.Popen(['pwd'], stdout=subprocess.PIPE)
output = cmd.communicate()[0]
print cmd.returncode
print output

出力

> python p.py
/Users/vlazarenko/tests

唯一の本当の違いはPopen、コマンドがゼロ以外のコードを返したときに例外をスローしないことです。

于 2012-12-28T00:19:55.557 に答える
4
于 2012-12-28T00:30:00.900 に答える