Python custom delimiter for read or readline -


i interacting subprocess , trying detect when ready input. problem having read or readline functions rely on '\n' delimiter @ end of line, or eof yield. since subprocess never exits, there no eof in file object. since keyword want trigger off of not contain delimiter read , readline functions never yield. example:

'doing something\n' 'doing else\n' 'input>' 

since process never exits, read or read line never see eof or \n requires yield.

is there way read file object , set custom delimiter input>?

you can implement own readlines function , choose delimiter yourself:

def custom_readlines(handle, line_separator="\n", chunk_size=64):     buf = ""  # storage buffer     while not handle.closed:  # while our handle open         data = handle.read(chunk_size)  # read `chunk_size` sized data passed handle         if not data:  # no more data...             break  # break away...         buf += data  # add collected data internal buffer         if line_separator in buf:  # we've encountered separator             chunks = buf.split(line_separator)             buf = chunks.pop()  # keep last entry in our buffer             chunk in chunks:  # yield rest                 yield chunk + line_separator     if buf:         yield buf  # return last buffer if 

unfortunately, due python default buffering policies won't able grab large swaths of data if not provided process you're calling, can resort setting chunk_size 1 , read input character character. so, example, need is:

import subprocess  proc = subprocess.popen(["your", "subprocess", "command"], stdout=subprocess.pipe)  while chunk in custom_readlines(proc.stdout, ">", 1):     print(chunk)     # whatever want here... 

and should capture > subprocesses' stdout. can use multiple characters separators in version.


Comments

Popular posts from this blog

networking - Vagrant-provisioned VirtualBox VM is not reachable from Ubuntu host -

c# - ASP.NET Core - There is already an object named 'AspNetRoles' in the database -

ruby on rails - ArgumentError: Missing host to link to! Please provide the :host parameter, set default_url_options[:host], or set :only_path to true -