Run script in python manage.py shell with < gives error but with exec() doesn't

When I run the command: “python manage.py shell < script.py” I get a an error message “NameError: name ‘socket’ is not defined” and when I use exec function to run the script.py inside “python manage.py shell” I don’t have any errors. Can someone explain me what’s the problem with the first command?

#socket.py
import socket

def allowed_gai_family():
return socket.AF_INET

print(allowed_gai_family())

I cannot recreate this behavior. This includes running it both under shell and shell_plus, and even trying variations like cat script.py | python manage.py shell

At no time do I get the error you’re describing. The only thing I can think of is a non-printable character in there somewhere causing issues.

If you’re calling your script socket.py, it may shadow the standard library socket module. Call it something else like script.py, as Ken used.

Good catch. Actually, I thought they were using ‘script.py’