我正在写一个简单的脚本,理想情况下可以帮助我方便地更改系统周围的目录。
实施的细节并不重要,但我们理所当然地说,我将把这个脚本放在/usr/bin
中并用一个参数来调用它,表明我想要在系统上找到的位置:goto project1
我希望当脚本退出时,我的终端当前工作将改为项目1。
为了做到这一点,我尝试了:
os.chdir('/')
subprocess.call('cd /', shell=True)
两者都不奏效。第一个更改Python中的工作目录,第二个在/
生成一个shell。
然后我意识到自己有多天真。当一个程序运行时,终端正在分配一个进程,同时从我的程序写入的stdout读取。无论它做什么,它都不会影响终端的状态。
但后来我想"我已经使用cd
多年了,当然有人为此写了代码",认为可能会有一些东西可以解决(系统调用等等) ?)。
但cd
甚至不是coreutils。相反,cd
的来源是:
builtin `echo ${0##*/} | tr \[:upper:] \[:lower:]` ${1+"$@"}
因此,我想到了几个问题:
cd
时,幕后实际发生了什么? (意思是终端和系统如何实际交互?)非常感谢你的帮助!
答案 0 :(得分:1)
您可以将其作为一对脚本执行:
<强> 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 $1`
<强>结果:强>
> pwd
/Users/cdl
> source directory.csh "/"
> pwd
/tmp
>
根据需要替换您喜欢的shell和Python变体。打开Python脚本的执行以进一步简化。
显然,shell正在更改目录,但Python可以执行所有想要找出shell发送位置的聪明逻辑。