Найти - Пользователи
Полная версия: Посоветуйте плеер на Python для youtube и облака ?
Начало » Python для новичков » Посоветуйте плеер на Python для youtube и облака ?
1
satfan
IDLE (Python 3.10 64-bit)
————————
Нужен плееер который будет воспроизводить плейлисты m3u с облаков.
Поясняю:
Плейлисты делаю сам - очень удобно для просмотра.
Формат загруженых видео: mp4

Для Windows есть два плеера:
1. PotPlayer - читает плейлисты m3u youtube с облака не воспроизводит.
2. VLC плееер - он видит плейлисты m3u, но не воспоизводит плейлисты m3u youtube с облака.
Другие плееры не знаю ?
————————
На спутниковом ресивере - читает плейлисты m3u youtube и облако (только cloud.mail.ru), другие облака не видит.
P.S
Для примера прикладывю плейлист: Тест.m3u
Мне кажется это интересная тема для обсуждения.
ZerG
1. Плей лист рабочий
Нормально открывается и показывает под линуксом через MPV
2. Какое отношение ваш вопрос имеет к питону?
3. Какая у вас ОС?
4. Попробуйте https://kodi.tv/
5. Возможно что бы другие плееры могли воспроизводить ссылки из ютуба
вам нуэно установить https://youtube-dl.org/
satfan
Спасибо ZerG
2. Какое отношение ваш вопрос имеет к питону? - Под винду нет таких плееров.
3. Какая у вас ОС? - Widows 10
5. Возможно что бы другие плееры могли воспроизводить ссылки из ютуба - PotPlayer воспроизводит ютуб.
Нужен плеер читающий - ютуб и облака !
ZerG
2. Какое отношение ваш вопрос имеет к питону? - Под винду нет таких плееров.
КАКОЕ ЕТО ОТНОШЕНИЕ имеет к языку программирования Python?
@Admin ?
satfan
Спасибо ZerG
Я и прошу плеер на Python.
На Windows10 - нет такого.
py.user.next
satfan
Мне кажется это интересная тема для обсуждения.
Я вобще скачиваю видео со всех подобных мест и смотрю их потом на телевизоре. А плейлист сегодня - один, завтра - другой. Это когда ссылки вроде не меняешь, а потом открываешь, а там не то видео, а другое уже какое-то или его там вообще больше нет, а ты его не досмотрел даже, только до середины. Было так много раз: смотришь видео, до середины его досмотрел, оставил, на следующий день открываешь или там через неделю, а его там нет уже или вообще другое что-то открывается. Так что плейлисты ненадёжны.

satfan
плеер на Python для youtube
Да просто через yt-dlp скачиваю на диск и смотрю. Раньше скачивал через youtube-dl, но потом он стал медленно качать. А yt-dlp использует другой алгоритм для скачивания, поэтому скачивает быстро.

Вот с dzen.ru я недавно скачал фильм Top Gun 2022 и посмотрел на телевизоре с флешки, так качал его, думаешь, чем? А вот этим вот yt-dlp. Там ссылка на плейлист m3u8 в исходнике страницы, но yt-dlp умеет вытягивать все части видео.

Потом просто себе добавил в адаптер (надстройка для yt-dlp и youtube-dl) код и теперь могу качать по ссылке на dzen.ru без копания в исходниках страницы.
...

# Load file from Dzen.ru
# load_file_dz(url, ofname)
# args:
# url - The url for video on Dzen.ru
# ofname - The output filename for saving loaded video
# return:
# 0 - If file loaded
# 1 - If any error
load_file_dz()
{
local url=$1
local ofname=$2
local m3u8_url

msg "Loading file from Dzen.ru to $ofname"
m3u8_url=`load_file_dz_get_m3u8_url "$url"`
if [ -z "$m3u8_url" ]; then
error "Video m3u8 url is not found"
return 1
fi
msg "Found m3u8 url"
Ytn "$m3u8_url" "$ofname"
}

# Load m3u8 url for video url from Dzen.ru
# load_file_dz_get_m3u8_url(url)
# args:
# url - The url for video on Dzen.ru
# stdout:
# The m3u8 url for video url
# return:
# 0 - If source file loaded and parsed
# 1 - If any error
load_file_dz_get_m3u8_url()
{
local url=$1
local url_embed
local url_final
local out

url_embed=$(load_file_dz_load_m3u8_embed "$url")
url_final=$(load_file_dz_load_m3u8_final "${url_embed}")
out="${url_final}"
echo "$out"
}

# Load embed url for video url from Dzen.ru
# load_file_dz_load_m3u8_embed(url)
# args:
# url - The url for video on Dzen.ru
# stdout:
# The embed url for video url
# return:
# 0 - If source file loaded and parsed
# 1 - If any error
load_file_dz_load_m3u8_embed()
{
local url=$1
local out

out=$(
curl -s -b "Session_id=noauth" "$url" | sed -n '
/<meta property="twitter:player:stream"/ {
s/^.*<meta property="twitter:player:stream" content="\([^"]*\)".*$/\1/p
q
}
'
)
echo "$out"
}

# Load final url for embed video url from Dzen.ru
# load_file_dz_load_m3u8_final(url)
# args:
# url - The embed url for video on Dzen.ru
# stdout:
# The final url for embed video url
# return:
# 0 - If source file loaded and parsed
# 1 - If any error
load_file_dz_load_m3u8_final()
{
local url=$1
local out

out=$(
curl -s "$url" | sed -n '
/"options":\[\],"url":"/ {
s/^.*"options":\[\],"url":"\([^"]*\).*$/\1/p
q
}
'
)
echo "$out"
}

...

Потом я просто эти команды для адаптера на скачивания файлов заношу в текстовый файл и просто скачиваю все фильмы пачкой, не заморачиваясь, что там где там в какой странице на сайте лежит. Потом просто на флешку их переношу и смотрю на телевизоре уже под чаёк.

Для каждого сайта в этом адаптере своё ответвление со всеми там запросами, выяснениями. Он у меня ещё умеет подбирать оптимальное видео, чтобы качать видео поменьше, но чтобы оно на экране телевизора потом квадратиками не шло. То есть он анализирует, какие разрешения видео есть, и делает из них выборку, принимая решение скачать вот это вот разрешение, а не самое лучшее разрешение, как это обычно бывает в таких программах. Поэтому фильмы весят у меня в итоге не по шесть гигабайт, а по два гигабайта, но при этом никаких смазанностей и квадратиков на экране нет, всё смотрится прекрасно. А размер в два гигабайта даёт возможность на флешке разместить их штук десять одновременно и все смотреть постепенно. Если бы они по шесть гигабайт были, то на флешке помещалось бы два-три фильма, не больше, и надо было бы постоянно с ней бегать туда-сюда, чтобы другие фильмы смотреть, потому что эти фильмы оказались неинтересными и их откладываешь на потом.
satfan
Спасибо py.user.next
1. Скачивать с ютуба тоже не всегда хочется, да и ПК не резиновый.
Сделал плейлист, качать ничего не нужно.
Может 1 из 50 ссылок перестанет работать когда-то, заменить её на работающюю всего всего делов.
Но это конечно как кому нравится.
——————————–
2. На спутниковом ресивере - читает плейлисты m3u youtube и облако (только cloud.mail.ru), другие облака не видит.
На ресивере стоит версия линукс - Enigma2
Версия в ресивере Python 2.7.18
Вот папка “плагин IPTVPlayer” с ресивера прилагаю. Если интересно посмотрите какие кодеки там используют.
IPTVPlayer
Этот плагин - читает плейлисты m3u youtube и одно облако (только cloud.mail.ru), другие облака не видит.
——————————-
3. Вы писали про dzen.ru - очень нужно:
могу качать по ссылке на dzen.ru - Ваш код по линукс ?
У меня Windows 10.
надстройка для yt-dlp и youtube-dl - как мне сделать под мой варинт Python ?
P.S
Ранее я брвл ссылки из кода видео dzen.ru скиптом. Но через пару дней ссылки перестали работаь.
Они та что-то химичат.
 import requests as req
import re
url = input("Введите URL: \n")
text = req.get(url).text
links = re.findall(r'https://strm\.yandex\.ru/vod/zen-vod/[^"]+\.m3u8', text)
print(*links, sep='\n\n')
——————————-
4. Куча бесплатных облаков.
Сделать плеер для воспроизведения с них н ПК- это вообще идеально.






py.user.next
satfan
1. Скачивать с ютуба тоже не всегда хочется, да и ПК не резиновый.
Такое у меня тоже есть. Но это не моя разработка, это в Emacs'е есть такой модуль Org-mode. И там можно делать таблицы живые, как в Excel'е. То есть ты их настраиваешь, код дописываешь под таблицей и она сама через этот код вычисляет всякие значения в ячейках. Также в неё можно заносить ссылки и давать им короткие имена. Это лучше списка видео, так как можно дописывать всякую информацию и форматировать эту информацию ещё. Также можно интегралы и производные решать в ячейках, так как есть возможность подключать функции из калькулятора Emacs'а, который тоже очень мощный (он может не только интегрировать и дифференцировать, но и просто корни уравнений искать, а также работать с матрицами и находить значения определителей, и векторы ещё может перемножать).

Так вот работа с плейлистами в Emacs'е выглядит так
картинка
Там у видео прямо в ссылках можно выставлять минуты и секунды и таким образом эти ссылки открываются на том месте, где остановился.

Единственное, что я сделал, для создания этих таблиц я написал скрипт, который из плейлиста на YouTube (по ссылке на плейлист) вытягивает все ссылки, названия и времена. Таким образом, я быстро делаю эти таблицы, не копируя всё вручную; мне скрипт все нужные данные добывает.

satfan
3. Вы писали про dzen.ru - очень нужно:
могу качать по ссылке на dzen.ru - Ваш код по линукс ?
Да, это мой скрипт, он не только с dzen.ru качает. Он качает с YouTube, Dzen.ru, Mail.ru, Ok.ru, Rutube.ru, Brighteon.com. И я его дальше продолжаю расширять. Раньше он ещё качал с Vk.com, но потом они сделали там скачивание только по имени и паролю и я просто затрахался выяснять, как там можно скачать без имени и пароля. Там можно скачать, но там они столько наворотили с печеньем в запросах по HTTP, что просто жалко время на это тратить всё. Может быть, потом когда-нибудь я займусь этим, но, скорее всего, я просто подожду, когда они сами всё откроют на скачку.

Вот так выглядит скачка видео с Dzen.ru
[guest@localhost Downloads]$ filmload.sh "https://dzen.ru/video/watch/637e6127180aaa0f63cd8977?t=5" v.mp4
Try `filmload.sh --help' for more information.
filmload.sh: Loading file from Dzen.ru to v.mp4
filmload.sh: Found m3u8 url
[generic] master: Requesting header
[redirect] Following redirect to https://cdn.dzen.ru/vod/zen-vod/vod-content/54ede45e9425bfc4f18fad431a45066e/782c2542-342e-4920-8dbc-e53bfb624fc5/kaltura/desc_0aa17ac03b7d798d930571f160fabd63/vV1XEH0xGun8/ysign1=83e3f5ad5e40adc44e0705a84881476965401023bb3f5e3302ab7167638d7d45,abcID=1558,from=unknown,pfx,region=10000,sfx,ts=638c72b9/master.m3u8?vsid=q9hyqzss5rz4r4x
[generic] master: Requesting header
[generic] master: Downloading m3u8 information
[info] master: Downloading 1 format(s): 2944-5
[hlsnative] Downloading m3u8 manifest
[hlsnative] Total fragments: 185
[download] Destination: v.mp4
[download] 100% of 269.47MiB in 03:31
[FixupM3u8] Fixing malformed AAC bitstream of "v.mp4"
[guest@localhost Downloads]$

То есть тут делать ничего не надо: просто ссылка и просто имя файла для сохранения подаётся и всё. А скрипт уже сам залазит внутрь страницы и делает переход на страницу встроенного видео и там уже есть ссылка полная, которую он и вычленяет из страницы и по которой потом скачка идёт.

Это помощь к программе (это я написал, чтобы самому не забыть, как она там работает и с каких сайтов может качать)
[guest@localhost Downloads]$ filmload.sh --help
usage: filmload.sh url savename

Load a film from YouTube.com, Ok.ru, Vk.com, Mail.ru, Rutube.ru,
Brighteon.com and Dzen.ru by url to the output filename, selecting
an optimal video format (neither very large, nor very small)
for watching on a tv screen.

noarg -- Print program usage information.
--help -- Print program help information.
--version -- Print program version information.

Example:

filmload.sh https://www.youtube.com/watch?v=a1b2c3d4 videoname.mp4

It will load the video file from YouTube with optimal resolution
and size and save it as videoname.mp4 file.

[guest@localhost Downloads]$

satfan
Ваш код по линукс ?
У меня Windows 10.
Я виндой не пользуюсь больше десяти лет. То есть она у меня есть, но я в ней только в игры играю типа S.T.A.L.K.E.R. и SWAT4. Остальные игры у меня просто в Linux установлены. У меня в Linux есть Starcraft, Age of Empires, Warcraft II, Doom 2, Call of Duty 2, Counter Strike и так далее. Есть игры для восьмибитки (Ниндзя черепашки там все части, Супермарио), есть игры для Playstation 1 (Silent Hill, Need for Speed). Это всё стоит в лине. Поэтому винда мне нафиг не нужна.

Естественно, я всё пишу под Linux и пользуюсь этим каждый день. Также я пишу для смартфона на Android, но там у меня программ немного. Я Java плохо знаю, поэтому каждая программа пишется о-о-очень долго. Во-первых, на нём пишется в десять раз больше, чем на питоне то же самое, а во-вторых, я его не знаю вообще и времени читать книжки по нему вообще нет, поэтому всё приходится изучать на ходу, и это тоже тормозит сильно разработку. Всё приходится делать в первый раз.

Так что я очень много пишу на Shell'е - это язык в интерпретаторе Bash, который в Linux используется повсеместно в качестве консольной оболочки. Аналог в винде - это PowerShell, но PowerShell, как и всё виндовое, гораздо хреновее Shell'а, потому что Shell делали для удобства разработки, а PowerShell делали, чтобы на винде людей оставить, чтобы они с винды не уходили никуда. Вот и вся разница. Поэтому на Shell'е писать - одно удовольствие, а PowerShell даже изучать не хочется, потому что видно, что это говно какое-то очередное от Microsoft.

satfan
надстройка для yt-dlp и youtube-dl - как мне сделать под мой варинт Python ?
Ты скачай их под винду и используй в голом виде, без надстроек. Насколько помню, под виндой они работают. А качают они не только с YouTube. Там и PornHub и всякие подобные сайты. У них там большой список, его можно посмотреть в репозитории на GitHub. И также они качают, если способ скачивания неизвестен, они пытаются угадать, как скачать и даже могут скачивать что-то, хотя сайт в них не занесён.

satfan
Ранее я брвл ссылки из кода видео dzen.ru скиптом. Но через пару дней ссылки перестали работаь.
Только что закачал видео. Моя надстройка (адаптер, состоящий из адаптеров для разных сайтов) закачала спокойно видео с dzen.ru.

satfan
4. Куча бесплатных облаков.
Сделать плеер для воспроизведения с них н ПК- это вообще идеально.
Ты знаешь, я пока пишу этот скачивальщик, добавляя в него сайт за сайтом в разные времена, я всё больше убеждаюсь, что нужно под каждый сайт свой индивидуальный адаптер писать. Ну, то есть нельзя написать один общий способ и качать с них всех этим общим способом. Они требуют разных подходов. То там надо переходы эти на встроенные видео делать, то там не надо эти переходы на встроенные видео делать и ссылку можно так взять. То там надо печенье посылать какое-то, то там не надо ничего посылать и ссылка и так будет в странице. Так что, там никогда не угадаешь, надо сидеть и сначала руками всё выяснять. А когда руками всё сделал, тогда и это всё последовательно заносится в скрипт в виде функций, которые друг друга там тягают и передают друг другу информацию, что как делать.

Так что не будет у тебя программы какой-то простой. А сложную ты замучаешься писать.
satfan
Спасибо за ответ.
Придётся качать по старому- неудобство качает только в реальном времени.
Вы писали: язык в интерпретаторе Bash - сможете малаленький Bash скрипт переделать в Python 3 &
py.user.next
satfan
Вы писали: язык в интерпретаторе Bash - сможете малаленький Bash скрипт переделать в Python 3 &
Вообще, это возможно сделать. Но даже то, что питон является кроссплатформенным языком (программы на нём можно запускать и в одной операционной системе, и в другой операционной системе, и в третьей), не делает программы на питоне кроссплатформенными. Ну, например, в программе на питоне для Linux питон может обратиться к программе, установленной в Linux, и использовать определённые пути к ней, к себе, к файлам каким-то, которые заложены в Linux ввиду её устройства. Но если эту же программу, написанную для Linux, поставить в Windows, то во-первых, в Windows нет этой программы, которая в Linux установлена, её надо установить сначала, а во-вторых, даже если её и поставить, то в Windows она ставится по другим путям и работает там вообще по-другому, и файлы тоже все вспомогательные в других местах расположены. То есть это придётся делать полиморфный питонокод, который ведёт себя типа одинаково, но под Linux делает свою основную работу линуксовым образом, а под Windows делает то же самое виндовым образом. А эти действия могут вообще в корне отличаться, хотя результаты этой работы выглядят похожими друг на друга. Это называется ad-hoc полиморфизм. При таком виде полиморфизма нужно каждую версию кода, делающего одно и то же, писать уникальным образом. Вот из-за этого, рациональнее всегда делать две версии программы - одна для Linux, а другая - для Windows. То есть ты их пишешь, называются они одинаково у тебя, версии у них тоже одинаковые стоят, но внутри они вообще полностью разные. Какие-то кусочки алгоритмов у них могут быть одинаково реализованы, но большая часть этих программ, процентов девяносто или восемьдесят, наверное, написана абсолютно по-разному, чтобы быть максимально оптимальными для тех операционных систем, для которых они написаны.

satfan
сможете малаленький Bash скрипт переделать в Python 3
Его нельзя переделать, его надо заново писать. Даже если бы он у меня на питоне был написан, под винду его надо было бы писать заново и для винды ещё дописывать куски, которых нет в линуксовой версии. Потому что винда - это винда, там куча тупизны в самой системе, поэтому там надо для урегулирования вопросов с этой тупизной писать допольнительный код. Просто вспомни, как надо было писать сайты раньше: сначала ты пишешь сайт, а потом пишешь целую тонну кода разного в этом сайте, чтобы этот сайт нормально открывался в виндовом Internet Explorer'е, потому что эта виндовая параша была ни к селу ни к городу, но при этом успела захватить рынок браузеров и из-за этого стояла практически на каждом компе у каких-нибудь бабок тупых, которые других браузеров не знали.

Почему я пишу на Shell'е? Хотя можно было бы писать на питоне и потом быстро переписывать эти питоновские скрипты под винду. (Или заранее их писать так, чтобы выделять из них некроссплатформенные участки кода в отдельные функции, которые потом переписываются под каждую операционную систему.) Потому что у меня скрипты активно используют средства операционной системы. Вот в том участке, который я приводил, активно используется программа sed, которая установлена практически везде в Linux (этой программе около сорока лет; даже больше, наверное), но я пользуюсь не только sed'ом, часто и программу awk использую, и многие другие линуксовые проги, которыми пользуется весь мир десятилетиями и которые практически во всех линуксах установлены сходу прямо после установки самой операционной системы.

Вот кусок этого же скрипта, который в скрипте отвечает за выбор разрешения видео с Ok.ru
# Determine the optimal format for video on Ok.ru;
# It returns the hd format or the sd format if the hd format
# doesn't exist
# load_file_ok_get_vformat(url)
# args:
# url - The url for video on Ok.ru
# return:
# "format for hd" - String with format for hd
# "format for sd" - String with format for sd if no hd
# none - If no sd and no hd
load_file_ok_get_vformat()
{
local url=$1

Ytl "$url" | awk '
state == 0 {
if ($1 ~ /^(sd|hd)$/)
state = 1
}
state == 1 {
if ($1 ~ /^hls-[0-9]+$/) {
vformat = $1
state = 0
}
}
END {print vformat}
'
}
Как видишь, тут уже не sed используется, а тут awk используется. Там, короче, выдаётся несколько колонок и в них надо полазить туда-сюда и таким образом выбрать подходящий формат для скачиваемого видео.

А это вот для Rutube.ru код, недавно его писал, тут вообще m3u8 листы выбираются, а не прямые видео
# Determine the optimal format for video on Rutube.ru;
# It returns m3u8-form for different formats; for the 720p format
# otherwise for the 1080p format otherwise for the 480p format if
# previous formats don't exist
# load_file_rt_get_vformat(url)
# args:
# url - The url for video on Rutube.ru
# return:
# "m3u8-NNNN" for 720p |
# "m3u8-NNNN" for 1080p |
# "m3u8-NNNN" for 480p |
# none
load_file_rt_get_vformat()
{
local url=$1

Ytl "$url" | awk '
$1 ~ /^m3u8/ && $2 == "mp4" {
if ($3 ~ /x480$/) {
has480 = 1
vformat480 = $1
}
else if ($3 ~ /x720$/) {
has720 = 1
vformat720 = $1
}
else if ($3 ~ /x1080$/) {
has1080 = 1
vformat1080 = $1
}
}
END {
if (has720) {
vformat = vformat720
}
else if (has1080) {
vformat = vformat1080
}
else if (has480) {
vformat = vformat480
}
print vformat
}
'
}
То есть вот эти вещи удобно делать через awk, а не через sed. Но при этом в страницах какие-то куски искать и вычленять из этих кусков внутренние куски лучше sed'ом, чем awk.

Поэтому мне нужны обе эти программы на компе одновременно. Представляешь, сколько мне придётся ставить в винду этих программ, которых там нет изначально ни одной?

Вот поэтому я пишу эти скрипты на Shell'е и пользуюсь ими в Linux'е. Винда она не для этого.

Кстати, на питоне я тоже пишу себе скрипты для системы, но что я пишу? Я пишу, например, распаковщик внутренних файлов браузера. У питона есть хорошие модули для распаковки разных архивов и вот я с этим столкнулся однажды, что они мне понадобились. Я писал скрипт для анализа внутренностей браузера, чтобы вытаскивать все открытые в данный момент ссылки в браузере и сохранять их в текстовый файл. Это типа когда надо отойти от компа срочно, а у тебя в браузере куча ссылок открыта и их надо все прочитать, просмотреть, а закрывать браузер не хочется, чтобы их потом по новой не искать все. Вот я себе такую программу написал. Так вот, когда я стал залазить под капот браузеру (без этого сам по себе он не даёт ссылки сохранять, типа закрывай браузер и всё, а потом ищи эти ссылки по новой, а их там двадцать штук, а может и больше), то под капотом оказалось, что эти ссылки хранятся в запакованном виде. Причём запакованы они были не каким-то архиватором обычным, а каким-то видоизменённым архиватором. То есть в линуксе, в котором стоит куча архиваторов, я этот файл со ссылками распаковать даже ничем не смог. Потом я стал его анализировать, что у него там внутри, и открыл для себя, что это обычная архивация, но с дописыванием каких-то метаданных в этот архив. То есть в лине разбирать эту структуру запакованного файла было не так удобно, и я взялся за питон. На питоне я написал отдельный скрипт, которому подаётся такой файл, запакованный обычным способом, но с дописанной какой-то хренью, питоновский скрипт всю эту хрень состригает, потом он этот файл распаковывает и выдаёт наружу. И вот у меня получилось в итоге два скрипта: один скрипт на Shell'е, который и делает всю работу основную; другой скрипт на питоне, который в какой-то конкретный момент времени просто запускается Shell-скриптом и распаковывает файл из искривлённого архива, а потом с этим файлом идёт дальнейшая работа в том же Shell-скрипте. Получилась такая комбинированная программа из скриптов на разных языках. Вот там мне понадобился питон, потому что в лине это было сложно распаковать. Но зато в лине проще общаться с самой операционной системой через Shell, потому что в Shell'е все средства для работы с директориями более удобные, чем в питоне.

Что я в итоге написал. Просто когда надо сохранить ссылки из браузера, я нажимаю комбинацию клавиш Ctrl + Win + f и у меня в директории на виду появляется файл для Emacs Org-mode, в котором есть все ссылки, открытые в данный момент в браузере. И дальше я закрываю браузер и выключаю комп. А потом я прихожу, включаю комп и из этого org-файла запускаю ссылки все.

Вот так он выглядит в итоге
картинка

Также я сделал там выгрузку в HTML-страницу (не везде же поставлен Emacs) и при запуске с параметром html, он сохраняет html-файл с этими ссылками внутри.

Вот так он выглядит в итоге
картинка

Ещё текстовый вид есть, из него в любой формат можно переводить, если не org и не html нужен, а какой-то вообще другой.
[guest@localhost ~]$ ffurls --help
usage: ffurls [ --text | --org | --html ]

Save open browser Firefox tabs (title and url) to the file with a given format.

noarg -- The default format from config file is used.
--text -- Save output to text format.
--org -- Save output to org format.
--html -- Save output to html format.
--version -- Print program version information.

[guest@localhost ~]$ ffurls --html
Try `ffurls --help' for more information.
[guest@localhost ~]$

То есть программа написана на Shell'е, но она иногда, в какие тонкие моменты, пользуется скриптами на Python'е.

Это вот я тебе привёл пример, что далеко не всегда программа пишется только на том или только на этом. У меня есть программы, которые написаны вообще на нескольких языках одновременно, и на двух, и на трёх. Так что таких ограничений типа “пишешь на питоне - пиши только на питоне” там нет. Что нужно для программы, на том ты и пишешь, и оно может варьироваться постоянно. Всё зависит от возникающих в процессе разработки задач.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB