在 Python 中更改呼叫者的当前工作目录
Change caller's current working directory in Python
我正在编写一个简单的脚本,理想情况下它可以帮助我方便地更改系统中的目录。
实现的细节并不重要,但理想情况下,我会将此脚本放在 /usr/bin
中,并使用一个参数调用它,该参数表示我想在系统上转到的位置:goto project1
我希望当脚本退出时,我终端的当前工作状态会更改为项目 1 的工作状态。
为了完成这个,我试过:
os.chdir('/')
subprocess.call('cd /', shell=True)
这两个都不起作用。第一个更改 Python 中的工作目录,第二个在 /
.
生成一个 shell
然后我意识到我是多么的天真。当一个程序是 运行 时,终端只是分叉一个进程,同时从我的程序正在写入的 stdout 读取。不管它做什么,它都不会影响终端的状态。
但后来我想到 "I've been using cd
for years, surely someone wrote code for that",认为可能会有一些问题(系统调用或其他?)。
但是 cd
甚至还不是 coreutils。相反,cd
的来源是这样的:
builtin `echo ${0##*/} | tr \[:upper:] \[:lower:]` ${1+"$@"}
所以,我想到了几个问题:
- 当用户调用
cd
时,幕后实际发生了什么? (意思是,终端和系统实际上是如何交互的?)
- 是否可以使用 Python 脚本之类的东西来改变终端位置?
非常感谢您的帮助!
您可以将其作为一对脚本来完成:
directory.py
#!/usr/bin/python
import sys
directory = sys.argv[1]
# do something interesting to manipulate directory...
print directory + "tmp"
directory.csh
#!/bin/csh -f
cd `python directory.py `
结果:
> pwd
/Users/cdl
> source directory.csh "/"
> pwd
/tmp
>
根据需要替换您最喜欢的 shell 和 Python 的变体。为 Python 脚本打开执行以进一步简化。
很明显,shell 正在更改目录,但 Python 可以执行所有你想弄清楚将 shell 发送到何处的巧妙逻辑。
我正在编写一个简单的脚本,理想情况下它可以帮助我方便地更改系统中的目录。
实现的细节并不重要,但理想情况下,我会将此脚本放在 /usr/bin
中,并使用一个参数调用它,该参数表示我想在系统上转到的位置:goto project1
我希望当脚本退出时,我终端的当前工作状态会更改为项目 1 的工作状态。
为了完成这个,我试过:
os.chdir('/')
subprocess.call('cd /', shell=True)
这两个都不起作用。第一个更改 Python 中的工作目录,第二个在 /
.
然后我意识到我是多么的天真。当一个程序是 运行 时,终端只是分叉一个进程,同时从我的程序正在写入的 stdout 读取。不管它做什么,它都不会影响终端的状态。
但后来我想到 "I've been using cd
for years, surely someone wrote code for that",认为可能会有一些问题(系统调用或其他?)。
但是 cd
甚至还不是 coreutils。相反,cd
的来源是这样的:
builtin `echo ${0##*/} | tr \[:upper:] \[:lower:]` ${1+"$@"}
所以,我想到了几个问题:
- 当用户调用
cd
时,幕后实际发生了什么? (意思是,终端和系统实际上是如何交互的?) - 是否可以使用 Python 脚本之类的东西来改变终端位置?
非常感谢您的帮助!
您可以将其作为一对脚本来完成:
directory.py
#!/usr/bin/python
import sys
directory = sys.argv[1]
# do something interesting to manipulate directory...
print directory + "tmp"
directory.csh
#!/bin/csh -f
cd `python directory.py `
结果:
> pwd
/Users/cdl
> source directory.csh "/"
> pwd
/tmp
>
根据需要替换您最喜欢的 shell 和 Python 的变体。为 Python 脚本打开执行以进一步简化。
很明显,shell 正在更改目录,但 Python 可以执行所有你想弄清楚将 shell 发送到何处的巧妙逻辑。