python getoutput () эквивалент в подпроцессе [дубликат]
этот вопрос уже есть ответ здесь:
- Хранить выходные данные подпроцесса.Вызов Popen в строке 9 ответов
Я хочу получить вывод из некоторых команд оболочки, таких как ls
или df
в скрипте python. Я вижу, что commands.getoutput('ls')
считается устаревшим, но subprocess.call('ls')
только дайте мне код возврата.
Я надеюсь, что есть некоторые простое решение.
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