1. ホーム
  2. python

[解決済み] エラー発生 - AttributeError: 'module' オブジェクトに 'run' 属性がない subprocess.run(["ls", "-l"]) 実行中

2022-02-17 04:29:16

質問

AIX 6.1上でPython 2.7を使っています。次の行を実行したいのですが、エラーが発生します。

subprocess.run(["ls", "-l"])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'run'

解決方法は?

その subprocess.run() 機能 は Python 3.5 以降にしか存在しません。

しかし、バックポートするのは簡単です。

def run(*popenargs, **kwargs):
    input = kwargs.pop("input", None)
    check = kwargs.pop("handle", False)

    if input is not None:
        if 'stdin' in kwargs:
            raise ValueError('stdin and input arguments may not both be used.')
        kwargs['stdin'] = subprocess.PIPE

    process = subprocess.Popen(*popenargs, **kwargs)
    try:
        stdout, stderr = process.communicate(input)
    except:
        process.kill()
        process.wait()
        raise
    retcode = process.poll()
    if check and retcode:
        raise subprocess.CalledProcessError(
            retcode, process.args, output=stdout, stderr=stderr)
    return retcode, stdout, stderr

タイムアウトのサポートはなく、完了したプロセス情報のためのカスタムクラスもないので、私はただ単に retcode , stdoutstderr の情報を表示します。それ以外はオリジナルと同じように動作します。