marshallslee
marshallslee

Reputation: 655

Python 3 does not recognize special characters

This is the app.py file.

#!/usr/bin/python3
import sys


def run():
    print(sys.argv)
    filename = sys.argv[1]
    print(filename)
    return


if __name__ == '__main__':
    run()

I want to run this code from the command line, so I tried the two following lines each.

python3 app.py input.txt

python3 app.py < input.txt

The first command showed the result I expected, which is ['app.py', 'input.txt']. However the second command just ended up showing ['app.py'].

It seems like the Python code does not recognize the special symbols. How can I make the script recognize them without changing the script itself? i.e. not modifying the command like this: python3 app.py '<' input.txt.

Upvotes: 0

Views: 374

Answers (1)

Jake Hill
Jake Hill

Reputation: 116

The < character is special and will actually stream the file specified to stdin. You cannot override this behavior as it comes from your shell not python itself. Here is an example of what is really happening, and how you can get the file contents.

import sys

file_contents = sys.stdin.read()  # This will read the entire stdin stream into file_contents

This will also work for the | character

echo "Hello, World" | python app.py

Upvotes: 2

Related Questions