Python / Tkinter: перезапустите TeamViewer нажатием кнопки на Ubunth - PullRequest
0 голосов
/ 30 сентября 2019

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

Я попытался сделать это, используя команды ядра в Team Viewer "Шпаргалка"

import tkinter as tk
import os
import time
root = tk.Tk()
root.title(string="TeamViewerRebootButton")
root.geometry("200x200")

def closePop_upCallback():
    None

def teamviewerReboot():
    rebooting = tk.Toplevel(master=root)
    label = tk.Label(master=rebooting, text="Rebooting...", font=("", 15))
    label.pack()

    try:
        os.system("sudo teamviewer daemon stop")

    os.system("sudo teamviewer daemon start")

    label.configure(text"Rebooting Complete")
    sleep(1)
    rebooting.destroy()




rebootTeamViewer = tk.Button(master=root, text="Restart TeamViewer", command=None)
rebootTeamViewer.pack()



root.mainloop()

пока это утверждает, что работает, насколько я могу судить, фактически не перезапускает TeamViewer.

1 Ответ

0 голосов
/ 30 сентября 2019

Первое: ваша кнопка имеет command=None, поэтому она никогда не запускает какую-либо функцию, поэтому она не может перезапустить ее.

Второе: вы не можете использовать try без except или finally, поэтомуВы можете получить ошибку, если ваша кнопка будет ее запускать.

Третье: вам нужно time.sleep вместо `sleep ()


Кстати: я бы использовал pkexec вместо sudo, чтобы показать окно для пароля - это большебезопасный затем работает sudo без пароля.

Большинство демонов имеет опцию restart, чтобы перезапустить его. Он также может начать deamon, когда он не работает. У меня нет teamviewer, чтобы проверить, есть ли у него эта опция.


import tkinter as tk
import os
import time

# --- functions ---

def teamviewer_reboot():

    rebooting = tk.Toplevel(root)

    label = tk.Label(rebooting, text="Rebooting...")
    label.pack()

    try:
        os.system("pkexec teamviewer daemon stop")
    except Exception as ex:
        print('ERROR:', ex)
    os.system("pkexec teamviewer daemon start")

    #os.system("pkexec teamviewer daemon restart")

    label.configure(text="Rebooting Complete")
    root.update() # update window because mainloop can't do this when sleep stops it.
    time.sleep(2)

    rebooting.destroy()

# --- main ---

root = tk.Tk()
root.title(string="TeamViewerRebootButton")
root.geometry("200x200")

reboot_teamviewer = tk.Button(root, text="Restart TeamViewer", command=teamviewer_reboot)
reboot_teamviewer.pack()

root.mainloop()
...