[英]Change caller's current working directory in Python
我正在編寫一個簡單的腳本,理想情況下,它可以幫助我方便地更改系統周圍的目錄。
實現的細節無關緊要,但假設理想情況下我會將這個腳本放在/usr/bin
,並使用一個參數來調用它,該參數表示我想去系統上的位置: goto project1
我希望當腳本退出時,我終端的當前工作會更改為項目 1 的工作。
為了實現這一點,我嘗試了:
os.chdir('/')
subprocess.call('cd /', shell=True)
兩者都不起作用。 第一個更改 Python 中的工作目錄,第二個在/
處生成一個 shell。
然后我意識到我是多么天真。 當程序運行時,終端只是分叉一個進程,同時從我的程序寫入的標准輸出中讀取。 無論它做什么,它都不會影響終端的狀態。
但后來我想“我已經使用cd
多年了,肯定有人為此編寫了代碼”,認為可能會有一些事情要處理(系統調用或其他什么?)。
但是cd
甚至不是coreutils 。 相反, cd
的來源是這樣的:
builtin `echo ${0##*/} | tr \[:upper:] \[:lower:]` ${1+"$@"}
所以,想到了幾個問題:
cd
時,幕后到底發生了什么? (意思是,終端和系統實際上是如何交互的?)非常感謝你的幫助!
您可以將其作為一對腳本來執行:
目錄.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 發送到何處的所有巧妙邏輯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.