python getoutput () эквивалент в подпроцессе [дубликат]


этот вопрос уже есть ответ здесь:

  • Хранить выходные данные подпроцесса.Вызов Popen в строке 9 ответов

Я хочу получить вывод из некоторых команд оболочки, таких как ls или df в скрипте python. Я вижу, что commands.getoutput('ls') считается устаревшим, но subprocess.call('ls') только дайте мне код возврата.

Я надеюсь, что есть некоторые простое решение.

3 54

3 ответа:

использовать подпроцесс.К popen:

import subprocess
process = subprocess.Popen(['ls', '-a'], stdout=subprocess.PIPE)
out, err = process.communicate()
print(out)

обратите внимание, что связь блоков до завершения процесса. Вы могли бы использовать

для Python >= 2.7, используйте subprocess.check_output().

http://docs.python.org/2/library/subprocess.html#subprocess.check_output

чтобы поймать ошибки с subprocess.check_output(), вы можете использовать CalledProcessError. Если вы хотите использовать вывод как строку, декодируйте его из байт-кода.

# \return String of the output, stripped from whitespace at right side; or None on failure.
def runls():
    import subprocess
    try:
        byteOutput = subprocess.check_output(['ls', '-a'], timeout=2)
        return byteOutput.decode('UTF-8').rstrip()
    except subprocess.CalledProcessError as e:
        print("Error in ls -a:\n", e.output)
        return None