簡體   English   中英

在 Python 中更改調用者的當前工作目錄

[英]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時,幕后到底發生了什么? (意思是,終端和系統實際上是如何交互的?)
  • 是否有可能讓 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 發送到何處的所有巧妙邏輯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM