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
panda0
V2EX  ›  Python

python 内运行子进程的问题,求解答

  •  
  •   panda0 · 2016-07-20 14:18:51 +08:00 · 2473 次点击
    这是一个创建于 3037 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我想要在 python 里开启virtualenv,然后运行一些命令,该怎么做呢?

    import subprocess
    p = subprocess.Popen(['source /Users/XX/Desktop/mio/worker/venv/bin/activate'],shell=True)
    print p.stderr
    import pika
    
    

    输出如下:

    None
    Traceback (most recent call last):
      File "/Users/Ru/Desktop/mio/worker/run.py", line 6, in <module>
        import pika
    ImportError: No module named pika
    
    
    

    另外,我想在python内打开一个终端运行a.py另外再打开另一个终端运行b.py。该怎么做呢?


    看了subprocess和EasyProcess模块,都没有得到答案,可能我看得不够深。小白一个,希望得到解答,谢谢。

    panda0
        1
    panda0  
    OP
       2016-07-20 15:07:35 +08:00
    第一个问题我有了新的想法:因为 subprocess 是打开一个进程然后运行命令,然后关闭。所以子进程激活的虚拟环境不会对父进程有任何影响。
    yangtukun1412
        2
    yangtukun1412  
       2016-07-20 15:35:52 +08:00
    virtualenv 提供了 activate_this.py, 可以在运行时切换到虚拟环境, 一般放在虚拟环境的 bin 目录下.
    jixiangqd
        3
    jixiangqd  
       2016-07-20 15:42:41 +08:00   ❤️ 1
    本来 python 的部署就是个难题,你还要这么搞。。。让程序依赖环境变得更加严重了。。。。
    如果你非要这么搞,为啥不用 shell 脚本呢?
    0x5010
        4
    0x5010  
       2016-07-20 16:18:28 +08:00
    进程交换. os.execv
    Ethaniz
        5
    Ethaniz  
       2016-07-20 19:24:33 +08:00
    @panda0 正解,你那个 subprocess 的命令只针对子进程,父进程没有用。这种需求还是直接上 shell 吧...
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5821 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 06:14 · PVG 14:14 · LAX 22:14 · JFK 01:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.