#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])