谈一谈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脚本所在的目录,如果使用了相对路径,也不会出现意外了。

扫描关注, 与我技术互动

QQ交流群: 211426309

加入知识星球, 每天收获更多精彩内容

分享日常研究的python技术和遇到的问题及解决方案