如何在python中更改目录,使其在运行脚本后保持不变?

2024-09-30 02:31:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图通过python脚本更改终端目录。我看过这个post和其他人喜欢它,所以我知道os.chdir公司,但它的工作方式不是我想要的。os.chdir公司似乎更改了目录,但仅适用于python脚本。例如,我有这个代码。在

#! /usr/bin/env python
import os

os.chdir("/home/chekid/work2/")
print os.getcwd()

不幸的是,运行之后,我仍然在python脚本的目录中(例如/home/chekid),而不是我想要的目录。见下文。在

^{pr2}$

我该怎么办?在

Edit:看起来我要做的事情在“普通”python中并不存在。我确实在附近找到了一份工作,尽管在我看来不那么优雅。在

 cd `./changedirectory.py`

Tags: 代码import目录env脚本终端homebin
3条回答

当前工作目录是进程的属性。它不能被其他程序更改,例如通过运行单独的Python程序来更改shell中的当前工作目录。这就是为什么cd总是一个shell内置命令。在

不能。shell的当前目录属于shell,而不是您。在

(好吧,你可以^{}这个shell,让它调用^{},但这可能不是一个好的设计,在Windows上不起作用,而且我也不会开始来知道如何在纯Python中实现它,除非你可能需要处理ctypes或类似的东西。)

您可以使用当前的工作目录启动子shell。这可能足够接近您的需要:

os.chdir('/path/to/somewhere')
shell = os.environ.get('SHELL', '/bin/sh')
os.execl(shell, shell)
# execl() does not return; it replaces the Python process with a new shell process

原来的外壳仍然会在那里,所以要确保你不要把它挂在那里。如果最初使用exec内建函数调用Python(例如exec python /path/to/script.py),那么原始shell将被Python进程替换,您不必担心这个问题。但是如果Python退出时没有启动shell,那么您将完全没有shell打开。在

如果你作弊,你可以:制作一个bash脚本来调用python脚本。python脚本返回要将目录更改为的路径。然后bash脚本执行acactual chdir。当然,您必须使用“source”在bashshell中运行bash脚本。在

相关问题 更多 >

    热门问题