# Выполнение Shell-команд

Эта функция позволяет выполнять Shell-команды или полные Shell-скрипты на устройстве. Все команды выполняются от имени root. Для совместимости с длительно работающими скриптами, эта функция также поддерживает запуск скриптов в фоновом режиме без завершения.

## Синхронное выполнение команд

Вы можете использовать следующий способ для быстрого выполнения команды или скрипта. Эта операция блокирует текущий процесс, поэтому время выполнения вашего скрипта или команды не должно быть слишком большим. Используется для выполнения коротких скриптов (0-10 секунд).

```python
cmd = d.execute_script("whoami")
```

```python
>>> d.execute_script("notexist")
exitstatus: 127
stderr: "mksh: <stdin>[2]: notexist: inaccessible or not found\n"
```

Возвращается код завершения, а также стандартный вывод и стандартная ошибка.

```python
print (cmd.stdout)
print (cmd.stderr)
print (cmd.exitstatus)
```

```python
>>> result = d.execute_script("id")
>>> print (result.stdout)
b'uid=0(root) gid=0(root)\n'
>>> print (result.stderr)
b''
>>> print (result.exitstatus)
0
```

## Выполнение команд в фоновом режиме

Выполнение команд в фоновом режиме используется для длительно работающих скриптов. Поскольку пользователь может написать бесконечный цикл или скрипт с бесконечным выводом, что приведет к заполнению памяти, результат выполнения фонового скрипта получить невозможно. Если вам необходимо получить вывод скрипта, пожалуйста, самостоятельно реализуйте вывод в файл внутри скрипта.

Следующий вызов выполнит длительный скрипт `sleep` и вернет строку `sid`, которая является ID этого фонового скрипта.

```python
script = "sleep 100; exit 0;"
sid = d.execute_background_script(script)
```

Если скрипт ведет себя непредсказуемо, вы также можете принудительно завершить его выполнение с помощью следующего вызова.

```
d.kill_background_script(sid)
```

С помощью следующего вызова вы можете проверить, завершился ли фоновый скрипт, используя его `sid`.

```python
d.is_background_script_finished(sid)
```

```python
>>> script = "sleep 100; exit 0;"
>>> sid = d.execute_background_script(script)
>>> print (sid)
ba06da93-c3aa-4457-b90e-247e42a16207
>>> d.is_background_script_finished(sid)
False
>>> d.kill_background_script(sid)
True
>>> d.is_background_script_finished(sid)
True
```