gpt4 book ai didi

python - 在 Python 中更改调用者的当前工作目录

转载 作者:太空宇宙 更新时间:2023-11-03 16:36:01 27 4
gpt4 key购买 nike

我正在编写一个简单的脚本,理想情况下它将帮助我方便地更改系统周围的目录。

实现的细节并不重要,但假设理想情况下我会将这个脚本放在 /usr/bin 中,并使用一个参数来调用它,该参数表示我想要在系统上访问的位置: 转到项目1

我希望当脚本退出时,我的终端当前的工作方式将更改为项目 1 的工作方式。

为了实现这一点,我尝试了:

os.chdir('/')

subprocess.call('cd /', shell=True)

这两者都不起作用。第一个更改 Python 中的工作目录,第二个在 / 处生成一个 shell。

然后我才意识到我是多么天真。当程序运行时,终端只是 fork 一个进程,同时从我的程序正在写入的标准输出读取数据。无论它做什么,都不会影响终端的状态。

但后来我想“我已经使用 cd 多年了,肯定有人为此编写了代码”,认为可能有一些事情需要解决(系统调用还是其他什么?)。

但是 cd 甚至不是 coreutils 。相反,cd 的来源是这样的:

builtin `echo ${0##*/} | tr \[:upper:] \[:lower:]` ${1+"$@"}

因此,我想到了几个问题:

  • 当用户调用 cd 时,幕后实际发生了什么? (也就是说,终端和系统实际上是如何交互的?)
  • 是否可以使用 Python 脚本之类的东西来更改终端位置?

非常感谢您的帮助!

最佳答案

您可以将其作为一对脚本来完成:

目录.py

#!/usr/bin/python

import sys

directory = sys.argv[1]

# do something interesting to manipulate directory...

print directory + "tmp"

目录.csh

#!/bin/csh -f

cd `python directory.py $1`

结果:

> pwd
/Users/cdl
> source directory.csh "/"
> pwd
/tmp
>

根据需要替换您最喜欢的 shell 和 Python 变体。打开 Python 脚本的执行以进一步简化。

显然,shell 正在更改目录,但 Python 可以执行您想要找出将 shell 发送到何处的所有巧妙逻辑。

关于python - 在 Python 中更改调用者的当前工作目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37201850/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com