2011-02-02 16 views
5

Estoy usando os.system() para realizar ejecuciones del shell de línea de comandos de Windows. Me gustaría cambiar el directorio actual de Windows cmd. Aquí hay una forma de hacerlo:Python: ¿Es posible cambiar el directorio actual del shell de la línea de comandos de Windows sin cambiar el directorio actual?

os.chdir('newPath') 

Pero chdir() también va a cambiar el directorio de trabajo actual real del pitón. No quiero cambiar el directorio de trabajo 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 Windows cmd. En otras palabras: deseo que los comandos os.system() se ejecuten en un directorio de trabajo actual (directorio de trabajo actual cmd de Windows) mientras que cualquier otra cosa debería ejecutarse en otro directorio de trabajo actual (el actual directorio de trabajo actual de Python).

Aquí es otro intento para cambiar única Windows cmd directorio actual:

os.system('cd newPath') 

Sin embargo, que, obviamente, no funciona ya que justo después de la ejecución del comando cd newPath Windows cmd directorio actual se pone a cero (porque no usaré el mismo shell de comandos de Windows en la siguiente llamada al os.system()).

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

+1

'Me gustaría mantener el directorio de trabajo actual, mientras que sólo cambian el cmd de Windows directory' de trabajo actual - ¿qué? –

+0

@BlueRaja: Tienes razón. No estaba claro. Acabo de editar la pregunta para hacerlo más claro. – snakile

Respuesta

7

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

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

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

Ejemplo de uso reemplazando os.system:

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

Gracias. ¿Podría agregar algunas palabras sobre el asunto 'os.waitpid()'? – snakile

+1

@snak waitpid se describe en el documento. Incluso puedes adivinar lo que hace. –

+3

'retcode = subprocess.call ([" yourcmd "," arg1 "," arg2 "], shell = Verdadero, cwd =" c:/your/path ")' – Apalala

1

Si sólo se tiene que trabajar en Windows, una forma podría ser:

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

¿por qué no simplemente 'iniciar cd mypath'? hoevever no está del todo claro hacia dónde va esta pregunta, consideró lo que zigdon y otros señalaron – MattiaG

+0

Supongo que el mismo tipo de solución también se aplica a Linux. –

1

Cuando se utiliza os.system, no se vuelve a utilizar la misma consola de comandos, pero generando uno nuevo para cada solicitud. Esto significa que no puede esperar que los cambios se propaguen entre invocaciones.

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

+0

Gracias, pero sé el hecho de que no estoy usando el mismo shell. Lo que estaba preguntando es cómo superar ese problema y cambiar el directorio actual de Windows sin cambiar el directorio actual real. – snakile

Cuestiones relacionadas