On Wed, 21 Oct 2009 11:24:37 -0400, Tim Arnold wrote:

> Hi, I'm writing a script to capture a command on the commandline and run it 
> on a remote server.
> I guess I don't understand subprocess because the code below exec's the 
> user's .cshrc file even though by default shell=False in the Popen call.

Using shell=True causes Popen to explicitly invoke the command via a
shell, i.e. "/bin/sh -c <command>" on Unix or "cmd /c <command>" on
Windows. If you use shell=False (the default), it uses fork()+exec() or
CreateProcess().

If the command which you are running ends up invoking a shell (as rsh
probably does), that's nothing to do with Popen.

In particular, if csh is being invoked, that isn't Popen's doing. It will
use either /bin/sh on Unix or %COMSPEC% (which is typically cmd.exe) on
Windows.

> Since the shell is executing in the child process anyway, is the only 
> difference when using shell=True is that environment variables can be 
> expanded in the command to be executed?

The difference is that the shell gets involved, so you can use environment
variables, backticks, redirections, pipelines, shell-builtins etc. It also
means that you need to quote or escape spaces and shell metacharacters
within arguments if you want them to be treated literally.

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

Reply via email to