Thomas,  Thanks very much! Following that example, I am indeed able to 
capture the output in my Output widget. I'm less clear about how to kill 
the running job (and keep the rest of the notebook alive). Here's my latest 
code, fwiw:

import ipywidgets as widgets
from subprocess import Popen, PIPE, STDOUT

run_output = widgets.Output(layout=widgets.Layout(width='500px', 
height='100px', border='solid'))
def run_cb(b):
    global my_proc
    print('run sim...')
    with run_output:
        args = ['hello']
        my_proc = Popen(args, stdout=PIPE, stderr=STDOUT)
        
    # This should be safe because we're not piping stdin to the process.
    # It gets tricky if we are, because the process can be waiting for 
input while we're waiting for output.
    while True:
        # Wait for some output, read it and print it.
        with run_output:
            my_output = my_proc.stdout.read1(1024).decode('utf-8')
            print(my_output, end='')

        # Has the subprocess finished yet?
        if my_proc.poll() is not None:
            break

    if my_proc.returncode != 0:
        print("Exited with error code:", my_proc.returncode)
        
def kill_cb(b):
    global my_proc
    print('kill proc...')
    my_proc.terminate()
run_button = widgets.Button(
    description='Run',
    disabled=False,
    button_style='success' # 'success', 'info', 'warning', 'danger' or ''
)
kill_button = widgets.Button(
    description='Kill',
    disabled=False,
    button_style='danger'
)

run_button.on_click(run_cb)
kill_button.on_click(kill_cb)
widgets.VBox([run_button, kill_button, run_output])


On Wednesday, March 7, 2018 at 10:38:27 AM UTC-5, takowl wrote:
>
> Have a look at this demo notebook:
>
> https://github.com/takluyver/rt2-workshop-jupyter/blob/e7fde6565e28adf31a0f9003094db70c3766bd6d/Subprocess%20output.ipynb
>
> It doesn't put output into a widget, but it's using print(), so it should 
> be easy to combine with a widget.
>
> If you're happy to kill the process by interrupting the kernel from 
> Jupyter, then it's just a matter of catching KeyboardInterrupt in the 
> Python code.
>
> Thomas
>
> On 7 March 2018 at 15:03, Randy Heiland <randy....@gmail.com <javascript:>
> > wrote:
>
>> I'd like to be able to display output from a program in an Output widget. 
>> (And I'd like to be able to kill the program from a widget too). Can 
>> someone offer advice?
>>
>> import ipywidgets as widgets
>> import subprocess, os
>>
>> run_output = widgets.Output(layout=widgets.Layout(width='500px', 
>> height='100px', border='solid'))
>> run_output
>>
>> def run_cb(b):
>>     #global run_output
>>     print('run sim...')
>>     with run_output:
>>         print('trying subprocess - does hello output show up?')
>>         args = ['hello']
>>         run_proc = subprocess.Popen(args)
>>         #os.system('hello')
>>     
>> run_button = widgets.Button(
>>     description='Run',
>>     disabled=False,
>>     button_style='success', # 'success', 'info', 'warning', 'danger' or ''
>>     tooltip='Run simulation',
>> )
>> run_button.on_click(run_cb)
>> run_button
>> widgets.VBox([run_button, run_output])
>>
>> where hello.c is simply:
>>
>> #include <stdio.h> 
>> #include <unistd.h> 
>> int main(int argc, char **argv) { 
>>   int idx; 
>>   for (idx=0; idx<4; idx++) { printf("argc=%d, %d) hello, 
>> world...\n",argc,idx); fflush(stdout); sleep(1); } 
>> }
>>
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "Project Jupyter" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to jupyter+u...@googlegroups.com <javascript:>.
>> To post to this group, send email to jup...@googlegroups.com 
>> <javascript:>.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/jupyter/ffd113b2-d2b9-46e1-99fc-ed17e05423cf%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/jupyter/ffd113b2-d2b9-46e1-99fc-ed17e05423cf%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Project Jupyter" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to jupyter+unsubscr...@googlegroups.com.
To post to this group, send email to jupyter@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/jupyter/c0939793-2697-4c1d-8a68-7345c72d875e%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to