python os.system("cd xxx")无效
前言:今天在写代码的时候,遇到了一个自己的盲区... 调试了蛮久,才解决...
问题:例如:os.system("cd /home/test/data") 这样并不能够成功的将路径切换的/home/test/data下...
1 import os 2 3 name="mmm" 4 os.system("mkdir %s" % name) 5 r = os.path.join(os.popen("pwd").readlines()[0][:-1], name) 6 os.system("cd %s " % r) 7 os.system("git init")
原因:
os.system的工作原理:Execute the command (a string) in a subshell. This is implemented by calling the Standard C function system(), and has the same limitations...
即:
- 关于子进程的创建需要明确两点:父进程的环境变量(environment variables)会默认传递到子进程中(工作目录PWD就是环境变量之一)
- 使用system函数,子进程无法影响父进程中的环境变量
根据这两点,执行os.system(path)引发的工作目录变更作用范围仅限于第一个被创建的子进程,故而当前的工作目录没有变更,到执行os.system("git init")就会报错。
就是:os.system()的每一次操作都是开启一个子进程,操作完成后,会返回父进程,但是无法改变父进程的环境变量。
解决办法:
-
采用&&连接多个命令,即可。
1 os.system(‘cd hello && ls’) 2 # 或者 3 os.system(‘cd hello’;’ls’)
- 使用os提供的os.chdir(‘/home/data)