On Friday, May 11, 2012 5:25:20 PM UTC+2, Coyote wrote:

> I am migrating to Python after a 20+ year career writing IDL programs 
> exclusively. I have a really simple question that I can't find the answer to 
> in any of the books and tutorials I have been reading to get up to speed.

Welcome here.

> I have two programs. The first is in a file I named file_utils.py:
> 
>    def pwd():
>        import os
>        print os.getcwd()

Move the import tot the root level of the file:

    import os

    def pwd():
        print(os.getcwd())

(and print() is a function these days)

> The second is in a file I named pwd.py:
> 
>    import os
>    print os.getcwd()
> 
> Here is my question. I am using the Spyder IDE to run these programs. If I 
> type these commands, I get exactly what I want, the name of my current 
> directory.
> 
> But, if I "run" the pwd.py script by selecting the "Run" option from the IDE 
> menu, the directory is printed *twice* in the output window. Why is that?

I'd say this is a bug or feature of the IDE. If I use ipython I get:

In [1]: %run mypwd
/nobackup/users/maarten/tmp/coyote

I tried to use Eclipse, but I don't think I'll do that again. I otherwise never 
use an IDE, it makes me confused. I don't know what the IDE is doing. Note that 
there is a standard module (at least on unix/linux) with the name pwd, but I 
guess that the IDE is not confused.

I do recommend you read http://docs.python.org/howto/doanddont.html as a 
starting point to avoid learning some bad habits, especially on importing. You 
probably already found 
https://www.cfa.harvard.edu/~jbattat/computer/python/science/idl-numpy.html

For scripts that are intended to be run from the command line, I use:

#!/usr/bin/env python

import os
def pwd():
    return os.getcwd()

if __name__ == "__main__":
    print(pwd())

This will allow you to import the module (without side effects) and call the 
function, as well as 'running' the file. This increases the usefullness of the 
module. There are other advantages, especially when the scripts involves (many) 
variables.

Maarten
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to