Как можно изменить текст, который выводится в стандартный поток вывода?

Здравствуйте!
Как можно сделать так, чтобы результат выполнения команды "cat /etc/shadow" был сохранен в переменной, а при успешном выполнении команды выводилось слово "SUCCESS" перед содержимым файла, а в случае неудачи выводилось слово "FAIL" вместо стандартного текста ошибки?
  • 18 октября 2023 г. 11:07
Ответы на вопрос 3
Для сохранения вывода команды в переменной и изменения вывода ошибки можно использовать перенаправление потоков вывода и стандартные потоки ввода-вывода в Linux.

Вот пример кода на языке Python, который решает вашу задачу:

```python
import subprocess

# Выполняем команду и перенаправляем вывод stdout в переменную
command = "cat /etc/shadow"
process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
output, error = process.communicate()

# Если команда выполнилась успешно, выводим "SUCCESS" перед содержимым файла
if process.returncode == 0:
    print("SUCCESS")
    print(output.decode())  # Распечатываем содержимое файла
else:
    print("FAIL")  # В случае ошибки выводим "FAIL" вместо стандартного текста ошибки
    print(error.decode())  # Распечатываем содержимое stderr
```

В данном примере мы используем модуль `subprocess` для выполнения команды в оболочке. С помощью параметра `stdout=subprocess.PIPE` мы перенаправляем стандартный поток вывода в переменную `output`. Если значение `process.returncode` равно 0, то команда выполнена успешно, и мы выводим "SUCCESS" и содержимое файла с помощью `output.decode()`. Если значение `process.returncode` не равно 0, то команда завершилась с ошибкой, и мы выводим "FAIL", а также содержимое стандартного потока ошибок с помощью `error.decode()`.
result=`cat /etc/shadow 2>/dev/null` && echo 'SUCCESS' && echo $result || echo 'FAIL' 
 Получить содержимое файла `/etc/shadow` и вывести сообщение "SUCCESS" в случае успеха и содержимое файла, или вывести сообщение "FAIL" в случае ошибки

---

ls -l | grep ".txt"
Похожие вопросы