请教一个问题,如何在 subprocess.Popen() 中设置 PYTHONPATH

2020-05-27 12:00:47 +08:00
 haozi1986

因为历史原因,现在有一大堆 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,或者有更好的方式来执行这样的命令且不会造成僵尸进程。

谢谢!

1908 次点击
所在节点    Python
8 条回复
wuwukai007
2020-05-27 12:08:45 +08:00
直接写 python 绝对路径不行吗
haozi1986
2020-05-27 12:17:58 +08:00
@wuwukai007 因为这些程序很多都有相对导入的模块,绝对路径无法处理这类导入,在 crontab 中执行的时候都设置了 PYTHONPATH
wuwukai007
2020-05-27 12:20:07 +08:00
相对倒入的话 python -m xxx
应该可以解决大部分问题
superrichman
2020-05-27 12:24:24 +08:00
subprocess 加个 cwd 参数
hsfzxjy
2020-05-27 12:26:03 +08:00
Popen 不是有个 env 参数吗
littlewey
2020-05-27 12:27:03 +08:00
或者把 `PYTHONPATH=<code_dir> python3 <code_dir>/xxx/yyy/zzz.py" >> /dev/null 2>&1` 这样的行写成 run_xxx_yyy_zzz.sh
chenxytw
2020-05-27 12:31:40 +08:00
env 参数,注意这个参数是覆盖,如果你是要 append 的话,要自己处理
haozi1986
2020-05-27 19:02:36 +08:00
感谢楼上诸位的帮助,问题解决了!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/675920

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX