Give input to a python script from a shell?

18,883

Solution 1

Do you mean something like:

python hello.py <<EOF
Matt
EOF

This is known as a bash HERE document.

Solution 2

There's really no better way to give raw input than sys.stdin. It's cross platform too.

import sys
print "Hello {0}!".format(sys.stdin.read())

Then

echo "John" | python hello.py # From the shell
python hello.py < john.txt # From a file, maybe containing "John"
Share:
18,883
kip_price
Author by

kip_price

Oberlin College CS student and preemptive procrastinator.

Updated on August 12, 2022

Comments

  • kip_price
    kip_price over 1 year

    I'm trying to write a shell script that will run a python file that takes in some raw input. The python script is essentially along the lines of:

    def main():
        name=raw_input("What's your name?")
        print "Hello, "+name
    main()
    

    I want the shell script to run the script and automatically feed input into it. I've seen plenty of ways to get shell input from what a python function returns, or how to run a shell from python with input, but not this way around. Basically, I just want something that does:

    python hello.py
    #  give the python script some input here
    #  then continue on with the shell script.
    
  • mgilson
    mgilson about 11 years
    the second one is a useless use of cat ... python hello.py < john.txt
  • Fredrick Brennan
    Fredrick Brennan about 11 years
    @mgilson Indeed...old habits die hard.
  • mgilson
    mgilson about 11 years
    I still do that (pretty frequently).
  • kip_price
    kip_price about 11 years
    I can't actually change the python files: I'm grading for an intro CS class, and they aren't teaching sys. I'm just trying to save myself time so I'm not giving manually input to 94 students' python scripts.