Развертывание bash в Python

#python #bash #subprocess #teamviewer

Вопрос:

Мне нужно развернуть teamviewer в установленной мной системе (raspberry pi4 с raspbian).

Мне нужна простота в том, что я отправляю USB-накопитель своему клиенту, и он нажимает на файл, чтобы запустить установку.

Я не могу зайти на другой сайт. Я хочу использовать python для развертывания

Мой скрипт на Python:

 #!/usr/bin/env python3

import subprocess
import os
import stat

st = os.stat('./team.sh')
os.chmod('./team.sh', st.st_mode | stat.S_IEXEC)
subprocess.call("./team.sh")
 

и мой сценарий bash:

 #!/bin/bash
sudo apt-get -y update;
sudo apt-get -y upgrade;
wget https://download.teamviewer.com/download/linux/teamviewer-host_armhf.deb;
ls | grep teamviewer-host_armhf.deb;
sudo dpkg -i teamviewer-host_armhf.deb;
sudo apt --fix-broken install;
sudo teamviewer passwd myspassword;
teamviewer info;
 

Сценарий Bash работает отлично.

Но у меня проблема с Python. Когда я запускаю его, я получаю

Файлообменник: [Ошибка 2] Такого файла или каталога нет: ‘team.sh’

Я не понимаю, потому что все файлы находятся в одном каталоге.

Комментарии:

1. Поскольку это находится на USB-накопителе и атрибуты файла будут сохранены, почему бы просто не сделать test.sh исполняемый файл и не попросить клиента запустить его вместо скрипта Python? Вы даже можете переименовать его во что-то вроде install (расширение sh не требуется из-за строки shebang)

Ответ №1:

Вы уверены, что запускаете свой скрипт Python из того же каталога, в котором он находится?

Если ваш скрипт Python находится в том же каталоге, что и ваш скрипт bash, вы можете использовать:

 #!/usr/bin/env python3
import os
import pathlib
import subprocess
import stat

CURRENT_DIR = pathlib.Path(__file__).parent.resolve()  # parent path of the current file
EXECUTABLE = f"{CURRENT_DIR}/team.sh"

st = os.stat(EXECUTABLE)
os.chmod(EXECUTABLE, st.st_mode | stat.S_IEXEC)
subprocess.run(["bash", EXECUTABLE])