Skip to content

Commit

Permalink
examples: add an example of a simple process wrapper, built around an…
Browse files Browse the repository at this point in the history
… interactive python process, in wrapping_interactive_python.v
  • Loading branch information
spytheman committed Dec 8, 2023
1 parent 0cb5c23 commit 4687f8c
Showing 1 changed file with 44 additions and 0 deletions.
44 changes: 44 additions & 0 deletions examples/process/wrapping_interactive_python.v
@@ -0,0 +1,44 @@
import os
import time
import term

python_exe := os.find_abs_path_of_executable('python') or {
eprintln('This example needs a python executable in your PATH. Please install Python to see it in action.')
exit(1)
}
mut p := os.new_process(python_exe)
defer {
dump(p.code)
p.close()
p.wait()
}
// The Python flags here, are needed to reduce clutter and buffering.
// See https://docs.python.org/3/using/cmdline.html
p.set_args(['-i', '-q', '-u'])
p.set_redirect_stdio()
p.run()
dump(p.pid)
println('This is a simple V wrapper/shell for the Python interpreter.')
println('Try typing some python code here, or type `bye` to end your session:')
for p.is_alive() {
// check if there is any input from the user (it does not block, if there is not):
if os.fd_is_pending(0) {
cmd := os.get_raw_line()
if cmd.len == 0 {
println('closed stdin detected, perhaps due to Ctrl-D...exiting')
break
}
if cmd.trim_space() == 'bye' {
println('Goodbye...')
break
}
p.stdin_write(cmd)
}
if oline := p.pipe_read(.stdout) {
print(term.bright_yellow('python stdout: ') + term.bold(oline))
}
if eline := p.pipe_read(.stderr) {
eprint(term.red('python stderr: ') + eline)
}
time.sleep(20 * time.millisecond)
}

0 comments on commit 4687f8c

Please sign in to comment.