AutoHotKey вызывает код Python - иногда работает, иногда нет - PullRequest
0 голосов
/ 15 марта 2019

Я пытаюсь вызвать код Python из AHK для обработки транскрипта YouTube в моем буфере обмена, удалить эти метки времени, объединить их обратно в одну строку, а затем заменить исходные тексты новой обработанной строкой, чтобы я мог вставить это из.

код AHK:

^x::

clipboard =   
Send, ^c

Run "directory\try.py"

Return

Код Python (try.py):

import pyperclip 

content = pyperclip.paste()
lines = content.split('\r\n')

new_lines = []
for line in lines: 
    for i,x in enumerate(line):
        if x.isalpha():
            position = i 
            break 
    new_line = line[position:]
    new_lines.append(new_line)

# print('Preview', '\n', ' '.join(new_lines))
pyperclip.copy(' '.join(new_lines))

Иногда эта система работает, но иногда нет. Иногда, когда это не работало, если я возвращался на страницу YouTube и снова нажимал Ctrl + X, это работало. Я почти уверен, что проблема в части AHK, так как я месяцами использовал код Python без каких-либо ошибок. Спасибо всем, кто может помочь.

1 Ответ

3 голосов
/ 15 марта 2019

Да. AHK слишком быстр. Эти вещи в буфере обмена требуют времени. Проверьте это. Вот как это сделать:

; Using ClipWait to improve script reliability:
clipboard =  ; Start off empty to allow ClipWait to detect change
Send, ^c
ClipWait ; Wait for the clipboard to contain text.
Run "directory\try.py"

Возможно, вам даже придется добавить время сна:

; Using ClipWait to improve script reliability:
clipboard =  ; Start off empty to allow ClipWait to detect change
Sleep, 50 ; milliseconds
Send, ^c
ClipWait ; Wait for the clipboard to contain text.
Sleep, 150 ; milliseconds
Run "directory\try.py"

Или еще лучше, попробуйте так (используя функцию OnClipboardChange):

OnClipboardChange("ClipChanged")
return

^x::
    Send, ^c
return

ClipChanged(Type) {
    MsgBox "%Clipboard%"  ;  comment out if working well
    run "directory\try.py"
    ExitApp
}

Вы можете закомментировать окончание ExitApp, но тогда не только ^x запустит его, но и каждый раз, когда меняется буфер обмена (так что если вы нажмете control+c самостоятельно), и вам понадобится какой-нибудь способ выхода из команды, например, как ^{esc}::ExitApp или тому подобное.

Hth !!

...