Run a Python script in Mac OS X Terminal

Terminal.appI’m sure this is self-evident for anyone with halfway decent knowledge of the Unix command-line, but it took me some searching through multiple sources to figure it out. (Kept getting env: python\r: No such file or directory errors whenever I tried to run the script on its own.)

If you need to run a Python script in the Mac OS X Terminal, save the script somewhere on your hard drive and run the following command:

python path/to/script [options]

Obviously, replace [options] with any options or arguments that the script accepts (or leave it off entirely). Remember that if you’re using bash for your shell, you can hit tab to autocomplete paths (which speeds things up a lot) and you’ll need to escape any spaces in paths with a backslash:

python ~/Documents/My\ Python\ Scripts/script.sh

Please note: I’m using OS 10.5; I believe the above will work with 10.2+ (since I think that’s when Python was bundled with the OS), but your mileage will vary. If you’re having issues, the Python documentation was one of the best resources I found, and of course the help file for the python command was useful once I figured out I needed to use a command other than running the script (type man python to access it).

6 Responses

Leave a response

  1. Todd Ransom says...

    You should be able to add a shebang line to the top of your script to avoid this:

    #!/usr/bin/python

    Also, don’t forget that on Unix systems the current directory is not usually in the path (on DOS-based systems it is always in the path). So if you are in a directory and want to run a script you have to do it like this:

    ./somescript.py

    ;)

    Todd

  2. Ian Beck says...

    There actually was a line like that although it read #!/usr/bin/env python. I tried dropping the “env” and making it /usr/bin/python (since I’d peeked into the /urs/bin folder and seen what looked like a Python executable), but the script still failed. I’m not entirely sure why. Running it with the python command was the only way I could get it to work.

    It might be that I need to configure the $path variable for my bash shell (it looked like it only included /usr/local/bin), but the syntax in the ~/.login file was confusing enough that I figured it would be safer not to mess with it (particularly since I had gotten the script to work).

  3. Todd Ransom says...

    ah, I bet your script does not have execute permissions on it. An ls -l will show you:

    prometheus:bin kinch$ ls -l

    -rwxr-xr-x@ 1 kinch kinch 1286 Dec 22 10:42 ftp-backup.sh

    the first entry is the permission on the file for owner, group, and everyone. You can use chmod +x on the file to add execute permissions.

    Todd

  4. Ian Beck says...

    Amusingly enough, I had set chmod +x on the file before trying to run it (after setting the permissions in the Finder Get Info window to no effect).

    I don’t know what it was with this file, but it just demanded to be run with the python command. :-)

  5. Todd Ransom says...

    ok, I have one last thought and then I will give up on my obsessive problem solving of this non-issue. I think your file has Mac line endings (\r) instead of Unix line endings (\n), which is confusing your shell.

    If you have TextMate you can save with Unix line endings from the save as dialog. If you don’t you just need to find some other way to replace the carriage returns with linefeeds. A simple python script maybe :D

    Todd

  6. Ian Beck says...

    Ha; a Python script to fix my Python script would definitely solve all of my problems.

This post has no trackbacks, which is sad.

Leave a response

Track me like a stalker:
  • Tagamac
  • Twitter
Clicky Web Analytics