我试图通过python脚本更改终端目录。我已经看到了这个post和其他人喜欢它,所以我知道os.chdir,但它不按照我喜欢的方式工作。 os.chdir似乎更改了目录,但仅用于python脚本。例如,我有这段代码。
#! /usr/bin/env python
import os
os.chdir("/home/chekid/work2/")
print os.getcwd()
不幸的是,在运行之后我仍然在python脚本的目录中(例如/ home / chekid)而不是我想要的目录。请参阅下文。
gandalf(pts/42):~> pwd
/home/chekid
gandalf(pts/42):~> ./changedirectory.py
/home/chekid/work2
gandalf(pts/42):~> pwd
/home/chekid
对我该做什么的任何想法?
编辑:看起来我正在尝试做的事情并不存在于正常的情况下'蟒蛇。我确实找到了一个解决方案,虽然它看起来并不那么优雅。
cd `./changedirectory.py`
答案 0 :(得分:4)
你做不到。 shell的当前目录属于shell,而不属于你。
(好吧,你可以ptrace(2)
shell并让它调用chdir(2)
,但这可能不是一个好的设计,不适用于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
内置函数(例如exec python /path/to/script.py
)调用Python,那么原始shell将被Python进程替换,您不必担心这一点。但是如果Python在没有启动shell的情况下退出,那么你将完全不打开shell。
答案 1 :(得分:3)
当前工作目录是进程的属性。它不能被其他程序更改,例如通过运行单独的Python程序来更改shell中的当前工作目录。这就是cd
总是 shell内置命令的原因。
答案 2 :(得分:1)
如果您作弊,则可以:创建一个bash脚本来调用您的python脚本。 python脚本返回您要更改目录的路径。然后,bash脚本执行正确的chdir。当然,您必须使用“ source”在bash shell中运行bash脚本。
答案 3 :(得分:-1)
你可以让你的python打印你想要移动到的目录,然后用cd“$(./python-script.py)”调用你的脚本。在这种情况下,您的脚本实际上不打印任何其他内容。