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