python - barplot - pandas plot
¿Cómo cambio el directorio a mi directorio de trabajo original con Python? (5)
Tengo una función que se parece a la siguiente. No estoy seguro de cómo usar el módulo os para volver a mi directorio de trabajo original al finalizar la ejecución del jar.
def run():
owd = os.getcwd()
#first change dir to build_dir path
os.chdir(testDir)
#run jar from test directory
os.system(cmd)
#change dir back to original working directory (owd)
nota: creo que el formato de mi código está desactivado, no estoy seguro de por qué. Mis disculpas de antemano
El consejo de usar os.chdir(owd)
es bueno. Sería inteligente poner el código que necesita el directorio modificado en un try:finally
block (o en python 2.6 y posterior, a with:
block). Eso reduce el riesgo de que accidentalmente ingrese un return
en el código antes del cambio. volver al directorio original.
def run():
owd = os.getcwd()
try:
#first change dir to build_dir path
os.chdir(testDir)
#run jar from test directory
os.system(cmd)
finally:
#change dir back to original working directory (owd)
os.chdir(owd)
Simplemente necesitas agregar la línea:
os.chdir(owd)
Solo una nota, esto también fue respondido en tu otra pregunta .
os.chdir (owd) debería hacer el truco (como lo has hecho al cambiar a testDir)
Python distingue entre mayúsculas y minúsculas, por lo que al escribir la ruta, asegúrese de que coincida con el directorio que desea establecer.
import os
os.getcwd()
os.chdir(''C://')
Un administrador de contexto es una herramienta muy apropiada para este trabajo:
from contextlib import contextmanager
@contextmanager
def cwd(path):
oldpwd=os.getcwd()
os.chdir(path)
try:
yield
finally:
os.chdir(oldpwd)
...Usado como:
os.chdir(''/tmp'') # for testing purposes, be in a known directory
print ''before context manager: %s'' % os.getcwd()
with cwd(''/''):
# code inside this block, and only inside this block, is in the new directory
print ''inside context manager: %s'' % os.getcwd()
print ''after context manager: %s'' % os.getcwd()
... que producirá algo así como:
before context manager: /tmp
inside context manager: /
after context manager: /tmp
Esto es realmente superior al cd -
shell builtin, ya que también se ocupa de cambiar los directorios cuando se cierra un bloque debido a una excepción.
Para su caso de uso específico, este sería en cambio:
with cwd(testDir):
os.system(cmd)
Otra opción a considerar es usar subprocess.call()
lugar de os.system()
, que le permitirá especificar un directorio de trabajo para ejecutar el comando:
# note: better to modify this to not need shell=True if possible
subprocess.call(cmd, cwd=testDir, shell=True)
... lo que le impediría tener que cambiar el directorio del intérprete.