On 12/26/2016 04:48 AM, Peter Otten wrote:
Jim Byrnes wrote:
Is there a way to terminate subprocess and still keep LO open so
pykeyboard can send it keystrokes from the script?
In theory you can open Libre Office from another thread, wait a moment and
then send it keystrokes from the main thread. I managed to do this with the
script below.
However, the procedure is very brittle; while experimenting I managed to
"press" the control key without releasing it afterwards. The interval from
doing it to realizing what was going on to "fixing" it (reboot) was an
interesting experience...
from contextlib import contextmanager
import subprocess
import threading
import time
import pykeyboard
kb = pykeyboard.PyKeyboard()
@contextmanager
def press_key(key, kb=kb):
kb.press_key(key)
try:
yield
time.sleep(1)
finally:
kb.release_key(key)
def open_it(filename):
subprocess.call(["libreoffice", filename])
print("exiting libreoffice thread")
LONG_ENOUGH = 15 # seconds
# enter text into an existing odt file
filename = "demo.odt"
text = "hello and goodbye"
opener = threading.Thread(target=open_it, args=(filename,))
opener.start()
time.sleep(LONG_ENOUGH) # for libreoffice to start and open the file
kb.type_string(text)
with press_key(kb.control_key):
kb.tap_key("s")
with press_key(kb.alt_key):
kb.tap_key(kb.function_keys[4])
print("exiting main thread")
Peter,
My apologies for taking so long to get back and thank you for the code.
With the holidays and moving to a new computer/OS I didn't have much
time to work on my little project.
I was able to use your code and send the necessary keystrokes to
manipulate LO. Thanks again.
Regards, Jim
_______________________________________________
Tutor maillist - Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor