Как передать блок текста в python из bash

Нашел решение через сервис systemd:(/etc/systemd/system/bluetoothKillOnSuspend.service)

[Unit]
Description=Bluetooth TurnOff on suspend
Before=suspend.target

[Service]
ExecStart=/usr/sbin/rfkill block bluetooth

[Install]
WantedBy=suspend.target

Включите его, нажав:systemctl enable bluetoothKillOnSuspend.service

Этот скрипт блокирует Bluetooth во время приостановки. Для меня он разблокируется автоматически при пробуждении -, поэтому мне не пришлось создавать новый скрипт для разблокировки Bluetooth после приостановки.

0
25.11.2020, 16:54
2 ответа

В основном вы правы, но вы не печатаете содержимое $input_dataна стандартный ввод. Вместо этого вы пытаетесь запустить команду с именем $input_data.

Используйте printfдля вывода содержимого переменной, изменив последнюю строку сценария оболочки следующим образом:

printf "%s" "$input_data" | python3./python_file.py
2
18.03.2021, 22:47

Стандартный ввод вашего скрипта оболочки передается команде python, которая есть у вас в скрипте, аналогично тому, как стандартный вывод вашего скрипта python поступает в стандартный вывод скрипта оболочки. Итак, нет необходимости использовать переменную, этого достаточно:

#!/bin/sh
python python_file.py

и вы можете заколлировать его с вашим cat file | sh script.shили лучше

sh script.sh < file

Если вам нужно больше удобочитаемости, вы можете использовать cat - | python script.py, где -означает стандартный ввод, или добавить комментарий о том, что это выполнение ожидает стандартного ввода.

1
18.03.2021, 22:47

Теги

Похожие вопросы