On 04/15/2012 01:32 AM, Steven D'Aprano wrote:
> Andrew Jahn wrote:
>> Hi all,
>>
>> I am attempting to use a Python program to change into a specified
>> directory before executing some commands. However, when I call the
>> Python
>> program from my Unix shell (tcsh) using a command such as
>>
>> "python myprogram.py"
>>
>> It runs without changing directory. Just to clarify, the lines of
>> code in
>> question are the following:
>>
>> import os
>> MyDir = "/usr/local/myDir"
>> os.system("cd "+myDir)
>
> That's not the code you are running, because it gives a NameError.
> Please copy and paste any code snippets you give, don't retype them
> (especially not from memory!) since you will likely introduce errors.
> The above error is trivial to fix, but who knows what other errors you
> have introduced?
>
> In any case, os.system can't help you, because that starts a new
> external process, it doesn't change the directory of the current
> process (your Python script).
>
>

I interpreted Andrew's description somewhat differently.  He's executing
a Python program before executing some other commands.  So those other
commands are shell commands, not Python lines.  In that case, Python has
nothing to do with the problem.

Andrew, are you trying to do this sort of thing ?

davea@think:~/tmp$ python program.py
davea@think:~/tmp$ myother
davea@think:~/tmp$ programs
davea@think:~/tmp$

where 'myother' and 'programs' are other "commands" or (programs and
shell scripts)?

In that case, nothing that your python program can normally do can alter
either the cwd or the environment.  The shell explicitly creates a new
environment for the python program, and tosses it away when it exits.

You can demonstrate it for yourself, easily enough.  The following   in
my (bash) environment.  With an executable file called change.sh, as
follows:

davea@think:~/tmp$ cat change.sh
#!/bin/bash
cd other
pwd
davea@think:~/tmp$ ./change.sh
/home/davea/tmp/other
davea@think:~/tmp$ pwd
/home/davea/tmp

( Notice the pwd of the shell did NOT change. )

davea@think:~/tmp$ source ./change.sh
/home/davea/tmp/other
davea@think:~/tmp/other$ pwd
/home/davea/tmp/other
davea@think:~/tmp/other$

Unfortunately, I don't know of any workaround for this.  The obvious
extension would be:

davea@think:~/tmp$ source python myprogram.py
bash: source: /usr/bin/python: cannot execute binary file

When I've had this type of problem I've resorted to creating a text file
from the Python script, and doing a chmod +x on that file and source'ing
it from bash.

-- 

DaveA

_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to