【问题标题】:How to "cd" between directories using a python script [duplicate]如何使用python脚本在目录之间“cd”[重复]
【发布时间】:2019-06-18 13:42:51
【问题描述】:

我正在编写一个测试脚本,如果该路径被确认存在并且是一个目录,它应该从当前目录 cd 到一个新目录

serial_number = input("Enter serial number: ")
directory = "/etc/bin/foo"
if os.path.exists(directory) and os.path.isdir(directory):
   #cd into directory?
   subprocess.call(['cd ..' + directory])

我的困境是我不知道如何正确地将变量传递给子进程命令,或者我是否应该使用 call 或 Popen。当我尝试上面的代码时,它返回一个错误,指出No such file or directory "cd ../etc/bin/"。我需要从当前目录返回一个目录,然后我可以输入/etc 并读取其中的一些文件。有什么建议吗?

【问题讨论】:

  • 使用subprocess 运行cd 几乎总是没用;它只会更改分叉子进程的工作目录,而一旦subprocess.call 返回,当前工作目录将直接保持不变。如果您希望在 Python 进程退出后工作目录发生更改,这也是正确的。

标签: python linux python-3.x subprocess


【解决方案1】:

更改使用的工作目录

os.chdir("/your/path/here")

子进程将产生新进程,这不会影响您的父进程。

【讨论】:

    【解决方案2】:

    您应该使用os.chdir(directory),然后调用以打开您的进程。我想这会更简单易读

    【讨论】:

    • 它不仅仅是“直截了当”和“可读”:它是实际工作的唯一可能方式。在子进程中执行cd 对父进程绝对没有影响。
    【解决方案3】:

    无法使用子进程更改当前目录,因为这只会在该子进程的上下文中更改当前目录,并且不会影响当前进程。

    相反,要更改 Python 进程中的当前目录,请使用执行该操作的 Python 函数:os.chdir,例如:

    os.chdir('../etc/bin/')
    

    另一方面,如果您的想法是 Python 脚本什么都不做,只是更改目录而不是退出(这就是我对问题的理解),那也行不通,因为当您退出 Python进程,父进程的当前工作目录将再次不受影响。

    【讨论】:

      【解决方案4】:

      如果你想找回一个文件夹,就像在 shell 中一样。

      os.chdir('..')
      

      或者在你的情况下,你可以,

      directory = "/etc/bin/foo"
      if os.path.exists(directory) and os.path.isdir(directory):
          os.path.normpath(os.getcwd() + os.sep + os.pardir)
      

      输出将是: "/etc/bin"

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-23
        • 2010-10-05
        • 1970-01-01
        相关资源
        最近更新 更多