zenlc2000 / pyp3

Pyed Piper tool by Toby Rosen at Sony Imageworks converted to Python 3
34 stars 13 forks source link

logic filters don't work with sp, spp, fp, or fpp #6

Open bobpaul opened 7 years ago

bobpaul commented 7 years ago

Observed

$ echo -e "This is some input\nignore this line" > file"
$ pyp3 -t file -b 2 "'some' in fp"

$ cat file | pyp3 "'some' in p"
This is some input
$ pyp3 -b 2 "'some' in sp" "This is some input" "ignore this line"
$ pyp3 -b 2 "sp" "This is some input" "ignore this line"
This is some input
ignore this line

Expected should behave the same regardless of where the input stream is from.

bobpaul commented 7 years ago

I think this is only a documentation bug if it's even a bug. It seems to be working as intended:

$ echo -e "1\n2" | pyp3 "'some' in sp" "This is some input" "ignore this line"
1

pyp IS filtering on sp, but it still only outputs p unless you tell it otherwise.

This could probably be made more clear in the documentation, esp w/re to the keep() and lose() functions.

So what if (ex for debugging) you want to read from a file or secondary without reading from stdin? It's a bit clunky, but:

$ pyp3 -t file -ib 2 "pp+fpp | 'some' in p"
This is some input

-b2 creates 2 blank lines as fake stdin. -i filters out blank lines right away pp+fpp combines the stdin and file contents. Since the input is blank_lines and we have --ignore_blanks, len(pp) == 0 and this just gives us fpp. proceed with the second stage in the internal pip as if the inputs came from stdin.

You can do the same thing with "pp + spp" for secondary input.