代码之家  ›  专栏  ›  技术社区  ›  Dave Everitt

运行python脚本后,给定目录中的cd终端?

  •  5
  • Dave Everitt  · 技术社区  · 14 年前

    我正在编写一个简单的python脚本,可以使用 subprocess 和/或 os 执行一些正常工作的命令。

    但是,当脚本退出时,我想 cd 实际的终端(在本例中是OS X)等退出后,新文件就可以在已创建的目录中使用了。以下全部内容( subprocess.Popen , os.system , os.chdir )能做我想做的事 在内部 脚本(即它们执行目标目录中的内容),但退出时,将终端留在 脚本自己的 目录,而不是 目标 目录。

    我想避免将shell脚本写入临时文件,只是为了实现这一点,如果无论如何都有可能的话?

    3 回复  |  直到 14 年前
        1
  •  10
  •   Dennis Williamson    14 年前

    遗憾的是,不允许进程更改其父进程的环境,在这种情况下,您的Python脚本是shell的子进程。你可以通过让你的python进程设置一个新的shell来“伪造”它——调用子进程来打开一个shell进程并将其呈现给用户,从自身继承修改后的环境——但是这样做的缺点是强迫python进程持续运行。

    这就是shell脚本的真正用途。:-)显然,有人需要编写一个更传统的shell(例如,比ipython更接近bash),它可以使用python作为脚本语言。

        2
  •  4
  •   msw    14 年前

    暂时忘记了Python,任何子进程都无法更改其调用shell的状态。因此,您需要一个结构来改变调用shell的状态,这正是保罗·克雷西所暗示的。

    alias mycd="cd `echo $1`"
    

    在哪里? echo 可替换为 script_which_outputs_a_directory_name_on_stdout.py 这有点像黑客,但至少是个老黑客。

        3
  •  1
  •   Paul Creasey    14 年前

    你试过简单地在当前shell中运行程序吗?

    $. script.py

    而不是

    $script.py