2016-11-14 88 views
1

我在AIX 6.1上运行并使用Python 2.7。想要执行以下行,但出现错误。获取错误 - AttributeError:'module'对象在运行subprocess.run([“ls”,“-l”])时没有属性'run'

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

'subprocess'不应该(并且不......)有一个叫做'run'的方法。 – DeepSpace

+0

@DeepSpace它在Python 3中执行https://docs.python.org/3/library/subprocess.html#subprocess.run,但不幸的是,他们正在使用Python 2 –

+1

@MosesKoledoye嗯,这个问题是用'python 2.7 ';) – DeepSpace

回答

6

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 

没有为超时的支持,并为完成过程信息没有自定义类,所以我只能返回retcodestdoutstderr信息。否则它会和原来的一样。

相关问题