因为历史原因,现在有一大堆 py 程序分散于各个目录中(数量大概有百多个),目前是通过 crontab 进行定时执行,维护的时候看见这一大堆计划任务就头痛,于是想给它们做一些整合,期间遇到了一些问题。
原 crontab 的命令模式大致如下:
PYTHONPATH=<code_dir> python3 <code_dir>/xxx/yyy/zzz.py" >> /dev/null 2>&1
我想通过 subprocess.Popen() 的方式来执行这样的命令,但是尝试了多次也无法设置 PYTHONPATH,在网上搜了一番也没找到合适的解决方法。
使用 os.popen() 倒是可以成功执行,但有一定概率会出现僵尸进程。
于是想请教一下大家,如何在 subprocess.Popen() 中设置 PYTHONPATH,或者有更好的方式来执行这样的命令且不会造成僵尸进程。
谢谢!
1
wuwukai007 2020-05-27 12:08:45 +08:00 via Android
直接写 python 绝对路径不行吗
|
2
haozi1986 OP @wuwukai007 因为这些程序很多都有相对导入的模块,绝对路径无法处理这类导入,在 crontab 中执行的时候都设置了 PYTHONPATH
|
3
wuwukai007 2020-05-27 12:20:07 +08:00 via Android 1
相对倒入的话 python -m xxx
应该可以解决大部分问题 |
4
superrichman 2020-05-27 12:24:24 +08:00 via iPhone 1
subprocess 加个 cwd 参数
|
5
hsfzxjy 2020-05-27 12:26:03 +08:00 via Android 1
Popen 不是有个 env 参数吗
|
6
littlewey 2020-05-27 12:27:03 +08:00 1
或者把 `PYTHONPATH=<code_dir> python3 <code_dir>/xxx/yyy/zzz.py" >> /dev/null 2>&1` 这样的行写成 run_xxx_yyy_zzz.sh
|
7
chenxytw 2020-05-27 12:31:40 +08:00 via iPhone 1
env 参数,注意这个参数是覆盖,如果你是要 append 的话,要自己处理
|
8
haozi1986 OP 感谢楼上诸位的帮助,问题解决了!
|