谈一谈python进程的工作路径
本文主要分析python进程的工作路径如何获取,如何修改,如何指定子进程的工作路径。
1. 如何获取python进程的工作路径
我在/root/web目录下编写一个test.py文件,内容如下
import os
print(os.getcwd())
执行python test.py 命令运行程序,输出结果为
/root/web
os.getcwd方法返回进程的工作路径,看上去,python脚本在哪个目录,工作路径就是那个目录,实际情况,进程的工作路径取决于在哪里运行它。
如果我是在/root目录里运行脚本,那么需要执行命令python web/test.py,os.getcwd()返回的就是/root。
2. 进程自己可以修改工作目录
python的os.chdir方法可以修改自身进程的工作路径
import os
print(os.getcwd()) # /root/web
os.chdir("/root/www")
print(os.getcwd()) # /root/www
chdir方法改变了进程的工作路径。
3. 工作路径的作用
了解进程的工作路径有什么用呢?进程的工作路径主要影响到程序里所使用的相对路径。
修改test.py文件
import os
print(os.getcwd())
open('1.txt', 'w').close() # 创建一个文件
在这段代码里,我创建了一个1.tx文件,我使用的是相对路径,这里就是相对进程的工作路径。
如果是在/root/web目录下执行Python test.py,那么就会在/root/web目录下新建1.txt。
如果我在/root目录下执行python web/test.py,就会在/root目录下新建1.txt。
4. 设置子进程的工作目录
如果程序里使用了相对路径,那么就要考虑进程的工作路径如何设置。
如果你在python进程里使用subprocess.Popen去执行另一个脚本,而那个脚本里使用了相对路径,你就需要考虑为子进程设置合理的工作路径。
编写脚本test2.py
import subprocess
p = subprocess.Popen('python /root/web/test.py', shell=True, cwd='/root/web')
retcode = p.wait()
print(retcode)
我在 /root目录下执行python web/test2.py,test2.py的工作路径是/root,启动的子进程test.py会继承父进程的工作路径。
但是我设置了cwd参数,设置了子进程的工作路径为/root/web,恰好是test.py脚本所在的目录,如果使用了相对路径,也不会出现意外了。