Python: ¿Es posible cambiar el directorio actual del shell de la línea de comandos de Windows sin cambiar el directorio actual?

Estoy usando os.system() para hacer ejecuciones de shell de línea de comandos de Windows. Me gustaría cambiar el directorio actual de cmd de Windows. Aquí hay una forma de hacerlo:

 os.chdir('newPath') 

Pero chdir() también cambiará el directorio de trabajo actual de Python. No quiero cambiar el directorio de trabajo real de Python porque quiero que otras partes de mi script se ejecuten en el directorio de trabajo actual original. Lo que quiero cambiar es solo el directorio de trabajo actual de cmd de Windows. En otras palabras: quiero que los comandos os.system() ejecuten en un directorio de trabajo actual (directorio de trabajo actual de Windows cmd) mientras que cualquier otra cosa debe ejecutarse en otro directorio de trabajo actual (el directorio de trabajo actual de Python).

Aquí hay otro bash de cambiar solo el directorio actual de cmd de Windows:

 os.system('cd newPath') 

Sin embargo, eso obviamente no funciona, ya que justo después de la ejecución del comando cd newPath se restablece el directorio actual de cmd de Windows (porque no os.system() el mismo shell de comando de Windows en la próxima llamada a os.system() ).

¿Es posible tener un directorio de trabajo actual separado para el shell cmd de Windows? (separado del actual directorio de trabajo actual).

El módulo de subprocess está destinado a reemplazar os.system .

Entre otras cosas, le proporciona subprocess.Popen() , que toma un argumento cwd para especificar el directorio de trabajo para el proceso generado (exactamente para su situación).

Consulte: http://docs.python.org/library/subprocess.html

Ejemplo de uso que reemplaza os.system :

 p = subprocess.Popen("yourcmd" + " yourarg", shell=True, cwd="c:/your/path") sts = os.waitpid(p.pid, 0)[1] 

Si solo tiene que funcionar en Windows, una forma podría ser:

 os.system('start /d newPath cmd') 

Cuando utiliza os.system , no está reutilizando el mismo shell de comandos, sino generando uno nuevo para cada solicitud. Esto significa que realmente no puede esperar que los cambios en él se propaguen entre invocaciones.

Sin embargo, podría escribir un contenedor, que siempre cambiará al directorio que desee antes de iniciar el comando.