Как запустить исходник с GitHub с нужными мне параметрами в коде python
Хочу запустить данный исходник с GitHub https://github.com/crinny/teleboost
Допустим я весь код с него поместила в один файл, ошибок нет. Главным исполняемым классом, как я поняла, является class ViewCommand(Command) В этом классе находится основная функция, в которую нужно передать параметры для дальнейшей работы. Если установить пакет 'teleboost', то для использования нужно выполнить команду python -m teleboost view "ссылка на пост" Мой вопрос заключается в том, как выполнить эту же команду, но непосредственно в исходнике, то есть в коде прописать ссылку.
Ответы (2 шт):
Можно через subprocess вызвать текущий интерпретатор и у него нужный модуль с параметрами.
Попробуйте:
import subprocess
import sys
url = 'ссылка на пост'
subprocess.run([sys.executable, "-m", "teleboost", "view", url])
Запуск модуля из командной строки как python -m teleboost view "ссылка на пост" вызывает модуль teleboost/__main__.py:
from .cli import application
if __name__ == "__main__":
application.run()
Объект application инициализируется так (teleboost/cli/__init__.py):
from cleo import Application # type: ignore
from .view import ViewCommand
__slots__ = ("application",)
application = Application()
application.add(ViewCommand())
Здесь cleo - библиотека, отвечающая за обработку параметров командной строки. Application нас не сильно интересует, нужно смотреть ViewCommand:
...
class ViewCommand(Command):
"""
Adds views to а post
view
{url : Telegram post URL}
{--p|proxies=?* : Proxies file(s)}
{--c|count=? : How many views do you want to add?}
"""
def handle(self) -> Optional[int]:
... # Разбор параметров командной строки
loop.run_until_complete(self.view(self.argument("url"), proxies_list, count))
return 0
@staticmethod
async def view(url: str, proxies: list, count: int):
channel, post_id = parse_telegram_post_url(url)
viewer = TeleboostViewer(
proxies=proxies, channel=channel, post_id=post_id, view_count=count
)
with yaspin(text="Adding views...").yellow.bold.dots12 as sp:
c = 1
async for result in viewer:
sp.text = f"Adding views... [{c}/{count}]"
if not result.ok:
sp.red.write(f"> {result.error} [{result.proxy}]")
c += 1
sp.green.ok("✔")
В методе handle происходит разбор параметров командной строки, потом вызывается метод view с полученными параметрами. yaspin - это просто прогрессбар. В самом сокращенном виде будет что-то такое:
from teleboost.view import TeleboostViewer
async def view(channel: str, post_id: int, proxies: list, count: int):
viewer = TeleboostViewer(
proxies=proxies, channel=channel, post_id=post_id, view_count=count
)
с = 1
async for result in viewer:
print(f"Adding views... [{c}/{count}]")
if not result.ok:
print(f"> {result.error} [{result.proxy}]")
c += 1
print("ok")
# Параметры: имя канала, id поста
# (ниже пример для url `https://t.me/channel_name/123`),
# список прокси, количество повторений
await view("channel_name", 123, [тут список прокси], 100500)