V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
haozi1986
V2EX  ›  Python

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

  •  
  •   haozi1986 · 2020-05-27 12:00:47 +08:00 · 1900 次点击
    这是一个创建于 1660 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    谢谢!

    8 条回复    2020-05-27 19:02:36 +08:00
    wuwukai007
        1
    wuwukai007  
       2020-05-27 12:08:45 +08:00 via Android
    直接写 python 绝对路径不行吗
    haozi1986
        2
    haozi1986  
    OP
       2020-05-27 12:17:58 +08:00
    @wuwukai007 因为这些程序很多都有相对导入的模块,绝对路径无法处理这类导入,在 crontab 中执行的时候都设置了 PYTHONPATH
    wuwukai007
        3
    wuwukai007  
       2020-05-27 12:20:07 +08:00 via Android   ❤️ 1
    相对倒入的话 python -m xxx
    应该可以解决大部分问题
    superrichman
        4
    superrichman  
       2020-05-27 12:24:24 +08:00 via iPhone   ❤️ 1
    subprocess 加个 cwd 参数
    hsfzxjy
        5
    hsfzxjy  
       2020-05-27 12:26:03 +08:00 via Android   ❤️ 1
    Popen 不是有个 env 参数吗
    littlewey
        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
    chenxytw
        7
    chenxytw  
       2020-05-27 12:31:40 +08:00 via iPhone   ❤️ 1
    env 参数,注意这个参数是覆盖,如果你是要 append 的话,要自己处理
    haozi1986
        8
    haozi1986  
    OP
       2020-05-27 19:02:36 +08:00
    感谢楼上诸位的帮助,问题解决了!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2301 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 15:46 · PVG 23:46 · LAX 07:46 · JFK 10:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.