例如,这是我的目录树:
+--- test.py
|
+--- [subdir]
|
+--- another.py
test.py:
import os
os.system('python subdir/another.py')
another.py:
import os
os.mkdir('whatever')
运行test.py后,我希望在whatever
中有一个文件夹subdir
,但我得到的是:
+--- test.py
|
+--- [subdir]
| |
| +--- another.py
|
+--- whatever
原因很明显:工作目录尚未更改为subdir
。那么在不同文件夹中执行.py文件时是否可以更改工作目录?
注意:
os.system
只是一个例子os.system('cd XXX')
和os.chdir
不允许编辑: 最后,我决定使用上下文管理器,在回答中 https://stackoverflow.com/posts/17589236/edit
import os
import subprocess # just to call an arbitrary command e.g. 'ls'
class cd:
def __init__(self, newPath):
self.newPath = newPath
def __enter__(self):
self.savedPath = os.getcwd()
os.chdir(self.newPath)
def __exit__(self, etype, value, traceback):
os.chdir(self.savedPath)
# Now you can enter the directory like this:
with cd("~/Library"):
# we are in ~/Library
subprocess.call("ls")
# outside the context manager we are back where we started.
答案 0 :(得分:4)
嗯,这是这样做的功能:os.chdir(path)。
可能它有点混乱或不存在因为获取当前工作目录的函数被称为os.getcwd()
并且没有对应的setter。尽管如此,doc明确表示chdir
会改变CWD。 p>
在python 3.x路径中也可以是有效的文件描述符,而在2.x分支fchdir(fd)
中必须使用。
答案 1 :(得分:4)
你确实可以使用os.chdir
,但依赖于当前工作目录实际上是什么的假设正在寻找麻烦,在你的情况下,这适用于os.system
中test.py
的呼叫好吧 - 尝试从其他任何地方执行test.py
,你会发现原因。
安全的方法是从__file__
属性派生当前模块/脚本的绝对路径,并为os.system
中对test.py
的调用和{{{{}的调用构建绝对路径1}}在os.mkdir
要获取当前模块或脚本目录的绝对路径,只需使用:
another.py
答案 2 :(得分:2)
将cwd
参数传递给subprocess。call()
。
os.system()
已过时; subprocess
模块功能更强大。