LINUX.ORG.RU

Скрипт некорректно исполняется по хоткею.

 , ,


0

1

Написал я скрипт для быстрой генерации карточек anki:

#!/bin/env python

import os
import requests
import re
import sys

file_name = sys.argv[2]
word = sys.argv[1]

html_ipa = requests.get('https://wooordhunt.ru/word/'+word).text
ipa = re.findall(r'<span title="американская транскрипция слова .*?" class="transcription"> .*?</span>', html_ipa)[0] 
ipa = re.findall(r'\|.*?\|', ipa)[0][1:-1]

translate = os.popen('trans en:ru -b '+word).read()[:-1] # Использую пакет translate-shell, ибо судя по всему гугл транслейт в лоб не берётся. Почему то оно очень медленное. (!!!!!!!)Надо заменить.

print('English word: '+word+'\nTranscription: '+ipa+'\nRussian word: '+translate)
en_example = input('English example: ')
ru_example = input('Russian example: ')
input()

with open(file_name, 'a') as f:
    print(word, ipa, en_example, translate, ru_example, sep='\t', file = f)

Если вызывать из терминала по запросу: exo-open --launch TerminalEmulator /home/d/ankigen.py "$(xsel -o)" /home/d/toanki.txt То всё работает как надо (в новом окне термнала выполняется скрипт). Однако, если выполнять эту же команду по хоткею, тогда скрипт крашится:
Traceback (most recent call last):
    File "/home/d/ankigen.py", line 22, in <module>
        ipa = re.findall(r'<span title="американская транскрипция слова .*?" class="transcription"> .*?</span>', html_ipa)[0] 
IndexError: list index out of range
Система manjaro. Хоткей через гуй прописывал. Я просто с толку сбит, в чём может быть дело?

Наверное очень мало людей кто парсит html при помощи re. Используйте BeautifulSoup4

Для отладки просто выведите что вылезает в html_ipa

sniper21 ★★★★★
()
Последнее исправление: sniper21 (всего исправлений: 2)
Ответ на: комментарий от sniper21

Я сделал отладочный вывод word и выяснилось что при исполнении через терминал в переменной лежит то что должно (то что отдаёт ей xclip -o), а в случае исполнения по хоткею там лежит конкретно

'$(xclip -o)'

То есть при исполнении по хоткею

"$(xsel -o)"

отдаётся тупо как строка. Но почему?

UkropPetrushka
() автор топика
Последнее исправление: UkropPetrushka (всего исправлений: 2)
Ответ на: комментарий от UkropPetrushka

‘$(xclip -o)’

Потому что твоя запускалка - не баш и не интерпретирует "$(xclip -o)" как команду, а передает как есть строкой.

В качестве простого решения можешь запускать команду как bash -c 'exo-open --launch TerminalEmulator /home/d/ankigen.py "$(xsel -o)" /home/d/toanki.txt'

grazor ★★
()
Ответ на: комментарий от UkropPetrushka

Пожалуйста :)

Прислушайся заодно к совету выше про парсинг html. Не обязательно суп, можно взять, например, lxml и искать элемент по xpath

grazor ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.