web-dev-qa-db-ja.com

エラーの取得-AttributeError:subprocess.run(["ls"、 "-l"])の実行中に 'module'オブジェクトに属性 'run'がありません

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'
21
nisarga lolage

subprocess.run() function は、Python 3.5以降でのみ存在します。

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

def run(*popenargs, input=None, check=False, **kwargs):
    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

タイムアウトのサポートはなく、完了したプロセス情報のカスタムクラスもありません。そのため、retcodestdout、およびstderr情報のみを返します。それ以外の場合、オリジナルと同じことを行います。

31
Martijn Pieters