-
-
Save fyears/4161739 to your computer and use it in GitHub Desktop.
#!/usr/bin/env python | |
# -*- coding: utf-8 -*- | |
''' | |
usage: | |
cat about.txt | python soinput.py | |
''' | |
import sys | |
def read_in(): | |
lines = sys.stdin.readlines() | |
for i in range(len(lines)): | |
lines[i] = lines[i].replace('\n','') | |
#print lines | |
return lines | |
def main(): | |
lines = read_in() | |
print lines | |
if __name__ == '__main__': | |
main() |
def read_in():
return [x.strip() for x in sys.stdin.readlines() ]
Concrete example where data flows into script using stdin from some previous program (another script). Line by line explanations for code below can be found here
# stdin.py
sys.stdout = fsock
print("15\n"
"A\n"
"B\n"
"C\n"
"D\n"
"E\n"
"F\n"
"G\n"
"H")
sys.stdout = saveout
fsock.close()
# stdin.py
def read_in():
return {x.strip() for x in sys.stdin}
def main():
lines = read_in()
for line in lines:
print(line)
if __name__ == '__main__':
main()
In the console, run this to see above working. Why this works is also explained here
>>>Python3.5 stdout.py
>>>cat out.log | Python3.5 stdin.py
If you use a set ( { ... }
) for the reading of lines, you won't necessarily get them back in the same order, though, right?
return {x.strip() for x in sys.stdin}
You probably want to be using a list comprehension instead, so the read input will stay in the order of having been read:
return [x.strip() for x in sys.stdin]
Thanks for the gist! I've used it to set up an alias to urlencode strings like so, maybe this is helpful to someone:
python3 -c 'import sys; from urllib.parse import quote; print(quote(sys.stdin.readlines()[0]))'
Most likely you don't want to remove all whitespace from the line, only the trailing newline
def read_in():
return [x.rstrip('\n') for x in sys.stdin ]
to use this I would run it like this
$ echo "Your Text or Cat the file whatever" | python solnput.py
<<o/p>>