Change directory not successfully done

Bengt Richter bokr at oz.net
Fri Nov 11 21:42:06 EST 2005


On Fri, 11 Nov 2005 10:16:02 +0800, Samuel Yin <samuel.yin at 163.com> wrote:

>Hi, guys,
>
>This should be a simple problem, but I just can not resolve it. I just
>want to use a python script to change my working directory. see my
>following code:
>
># mycd.py
>1) destdir = "xxxxxxxx"
>2) command = "cd "+ destdir
>3) os.system(command)
>4) os.chdir(destdir)
>
>But neither 3) nor 4) is used, I just can not change the directory after
>execute mycd.py. This remind me of bash script. If you change directory
I think you are reminded well. It is no use to create a throwaway child process
that has the working directory you want, but is just thrown away along with the process ;-)

>in your bash script file, it will only impact the sub process of that
>script, except that you invoke that bash script by ./script_file_name.
>But what should I do in the case of python script?
If you do 1) 2) and 4) _within_ your script, the process that is running
your script should see the new working directory. E.g., interactively,

 >>> import os
 >>> os.getcwd()
 'C:\\pywk\\grammar\\ast'
 >>> os.chdir('..')
 >>> os.getcwd()
 'C:\\pywk\\grammar'


But if you execute 1) 2) and 4) by running mycd.py (comment out "3)") in
a separate process like os.system('python mycd.py') or such, that's only
going to throw it away. If you really want the directory change as a script
that will affect your running script, import it or execfile it. E.g.,

 >>> open('mycd.py','w').write("""\
 ... import os
 ... print 'changing cwd %s to parent =>'%(os.getcwd()),
 ... os.chdir('..')
 ... print os.getcwd()
 ... """)

Ok see where we are
 >>> import os
 >>> os.getcwd()
 'C:\\pywk\\grammar'

Now see if importing the module we just wrote will do what it's supposed to

 >>> import mycd
 changing cwd C:\pywk\grammar to parent => C:\pywk

Check effect
 >>> os.getcwd()
 'C:\\pywk'

Seems like it worked.

But note:
(BTW we now have to specify the old subdirectory
from current working dir in order to reach mycd.py ;-)

 >>> os.system('py24 grammar\\mycd.py')
 changing cwd C:\pywk to parent => C:\
 0
 >>> os.getcwd()
 'C:\\pywk'

I.e., changed but thrown away with subprocess

Does this help?

Regards,
Bengt Richter



More information about the Python-list mailing list