[Tutor] How to interact with the result of subprocess.call()
jf_byrnes at comcast.net
Sat Dec 24 20:21:20 EST 2016
On 12/24/2016 05:10 PM, Danny Yoo wrote:
> On Sat, Dec 24, 2016 at 2:40 PM, Jim Byrnes <jf_byrnes at comcast.net> wrote:
>> subprocess.call(['libreoffice', '/home/jfb/test.ods'])
>> If I run the above code, libreoffice opens the test.ods spreadsheet then
>> just sits there. When I close libreoffice the two enter_keys are executed in
>> the terminal that originated the script.
>> How can I continue to send keystrokes to libreoffice from the script once it
>> has been opened by subprocess.call()?
> Hi Jim,
> You can not use subprocess to automate a GUI application. This
> approach will not work because libreoffice isn't written to pay
> attention to the stdin file handle of its process.
> That's one of the traditional reasons why GUI applications are
> unpopular for programmers: in general, GUI-based applications are not
> trivial to automate.
> You do have a few options:
> * See if the application provides a programming interface (an "API").
> In the case of libreoffice, there does appear to be such an API:
> Accessing it is very much outside the domain of Python-tutor: you will
> likely need to talk with with the libreoffice folks. But if you can
> do this, it's probably nicer since the interface will use the terms of
> libreoffice, rather than in terms of keystrokes, timer delays, and
> mouse movement.
> * More general automation of GUI applications is possible. Here is a
> link to pyautogui, a third-party library that handles GUI automation:
> Again, you'll probably need to talk with folks who have experience
> with pyautogui; I don't think many of us on Tutor are very familiar
> with it.
> Good luck!
I am not trying to automate libreoffice using subprocess. In an earlier
message I was told that subprocess was the way to open libreoffice from
a python script. It does do that but now it seems to be blocking my
attempts to send keystrokes to libreoffice.
Up until this point in the script I have used a combination of Selenium
and pykeyboard to log on to a web site and put some info in the
clipboard. Now I need to send keystrokes to libreoffice to paste from
the clipboard into the spreadsheet.
I have used pyuno api to automate libreoffice in the past, but it was a
time consuming and confusing process. I was trying this approach
because it looked like I could avoid the uno complexity. I think it
would work if I could figure out how to send keystrokes to libreoffice
after it is opened using subprocess or some alternative that would work
More information about the Tutor