С поиском и заменой все понятно, но мне все это неудобно. Если бы мне нужно было прочесать стену текста и сделать там замену обратных слэшей, то я бы конечно так и поступил. В моем случае, проще экранировать.
Да, это не кросс-платформенно, но мне это и не требуется. У меня было много попыток использования как линуксов (самых разных), так и macos и для меня это была сущая пытка. Я с этим завязал) Линукс использую только на серверах.
На практике удобнее экранировать, мне по крайней мере, так как чаще всего я копирую пути. Проще дописать еще один экранирующий обратный слэш, чем стирать существующий обратный слэш и ставить слэш. На одно нажатие кнопки меньше.
Не думаю, что там для Вас будет что-то интересное, так как писалось под себя. Мне к примеру не нужен автозапуск и не нужна оболочка. Со мной путешествует внешний SSD с моими проектами и программами. Ну и пара команд для личного комфорта.
import subprocess
import psutil
import os
import pathlib
print("-------------------------------------------------------------------------")
print("")
print("1 - Запустить все приложения")
print("")
print("2 - Запустить приложения, кроме торрент-клиента")
print("3 - Запустить приложения, кроме приложений на диске А")
print("4 - Запустить приложения, кроме приложений на диске А и торрент-клиента")
print("")
print("5 - Завершить все приложения")
print("")
print("6 - Перезагрузить Проводник")
print("")
print("7 - Выключить компьютер через...")
print("8 - Отменить выключение компьютера")
print("")
print("-------------------------------------------------------------------------")
print("")
choice = input("Выберете пункт меню: ")
print("")
print("-------------------------------------------------------------------------")
print("")
pathToScript = os.path.dirname(__file__)
localAppData = os.getenv('localappdata')
apps = [\
["ShareX.exe", "Y:\\Programs\\ShareX --- видео и снимки экрана.pyw", "1 2 3 4"], \
["thunderbird.exe", "Y:\\Programs\\Thunderbird --- почтовый клиент.pyw", "1 2 3 4"], \
["XYplorer.exe", "Y:\\Programs\\Apps\\XYplorer\\XYplorer.exe", "1 2 3 4"], \
["RoyalTS.exe", "A:\\Software\\RoyalTS\\RoyalTS.exe", "1 2"], \
["rutview.exe", "A:\\Software\\RMS\\rutview.exe", "1 2"], \
["Telegram.exe", "Y:\\Programs\\Apps\\Telegram\\Telegram.exe", "1 2 3"], \
["Todoist.exe", "Y:\\Programs\\Todoist (Тудуист) --- планировщик задач.pyw", "1 2 3"], \
["qbittorrent.exe", "Y:\\Programs\\Apps\\qBittorrent\\qbittorrent.exe", "1 3"], \
["vivaldi.exe", "c:\\Vivaldi\\Application\\vivaldi.exe", "1 2 3 4"], \
["vivaldi.exe", f"{localAppData}\\Vivaldi\\Application\\vivaldi.exe", "1 2 3 4"], ]
def runApp(x):
runningApps = []
for proc in psutil.process_iter():
runningApps.append(proc.name())
for app in apps:
i = 0
if not app[i] in runningApps:
if app[2].find(x) >= 0 and os.path.exists(app[1]):
fileExtension = pathlib.Path(app[1]).suffix
if fileExtension == ".pyw" or fileExtension == ".py":
subprocess.Popen(["python", app[1]], cwd=os.path.dirname(app[1]))
else:
subprocess.Popen(app[1], cwd=os.path.dirname(app[1]))
i += 1
subprocess.run('taskkill /IM "explorer.exe" /F')
subprocess.Popen('C:\\Windows\\explorer.exe')
def taskKill(x):
subprocess.run(f'taskkill.exe /fi "ImageName eq {x}"', check=True, shell=True)
def taskKillHard(x):
subprocess.run(f'taskkill.exe /F /fi "ImageName eq {x}"', check=True, shell=True)
match choice:
case "1":
runApp("1")
case "2":
runApp("2")
case "3":
runApp("3")
case "4":
runApp("4")
case "5":
taskToKill = ["thunderbird.exe", "RoyalTS.exe", "rutview.exe", "winbox.exe", "winbox64.exe", "Telegram.exe", "Todoist.exe", "vivaldi.exe"]
taskToKillHard =["qbittorrent.exe", "ShareX.exe", "whatsapp.exe", "ktalk.exe", "Pipette.exe", "steamwebhelper.exe", "steam.exe", "LagoFast.exe", "t1client-vc142e.exe", "vhui64.exe"]
for task in taskToKill:
taskKill(task)
for task in taskToKillHard:
taskKillHard(task)
case "6":
subprocess.run('taskkill /IM "explorer.exe" /F')
subprocess.Popen('C:\\Windows\\explorer.exe')
case "7":
shutdownTime = int(input("Через сколько минут выключить компьютер: ")) * 60
subprocess.run('shutdown /s /t ' + str(shutdownTime), check=True, shell=True)
case "8":
subprocess.run('shutdown -a', check=True, shell=True)
case _:
print("Такого варианта не существует")
Тоже думал софтину написать на расте поначалу, но, ришел к выводу, что это тупая затея. Каждый раз, когда нужно внести изменения в запуск конкретной программы, нужно перекомпилировать. В итоге, сделал скрипт на питоне с меню, блекджеком и распутными функциями.
С поиском и заменой все понятно, но мне все это неудобно. Если бы мне нужно было прочесать стену текста и сделать там замену обратных слэшей, то я бы конечно так и поступил. В моем случае, проще экранировать.
Да, это не кросс-платформенно, но мне это и не требуется. У меня было много попыток использования как линуксов (самых разных), так и macos и для меня это была сущая пытка. Я с этим завязал) Линукс использую только на серверах.
На практике удобнее экранировать, мне по крайней мере, так как чаще всего я копирую пути. Проще дописать еще один экранирующий обратный слэш, чем стирать существующий обратный слэш и ставить слэш. На одно нажатие кнопки меньше.
Не думаю, что там для Вас будет что-то интересное, так как писалось под себя. Мне к примеру не нужен автозапуск и не нужна оболочка. Со мной путешествует внешний SSD с моими проектами и программами. Ну и пара команд для личного комфорта.
Тоже думал софтину написать на расте поначалу, но, ришел к выводу, что это тупая затея. Каждый раз, когда нужно внести изменения в запуск конкретной программы, нужно перекомпилировать. В итоге, сделал скрипт на питоне с меню, блекджеком и распутными функциями.