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

2016-07-20 14:18:51 +08:00
 panda0

我想要在 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模块,都没有得到答案,可能我看得不够深。小白一个,希望得到解答,谢谢。

2482 次点击
所在节点    Python
5 条回复
panda0
2016-07-20 15:07:35 +08:00
第一个问题我有了新的想法:因为 subprocess 是打开一个进程然后运行命令,然后关闭。所以子进程激活的虚拟环境不会对父进程有任何影响。
yangtukun1412
2016-07-20 15:35:52 +08:00
virtualenv 提供了 activate_this.py, 可以在运行时切换到虚拟环境, 一般放在虚拟环境的 bin 目录下.
jixiangqd
2016-07-20 15:42:41 +08:00
本来 python 的部署就是个难题,你还要这么搞。。。让程序依赖环境变得更加严重了。。。。
如果你非要这么搞,为啥不用 shell 脚本呢?
0x5010
2016-07-20 16:18:28 +08:00
进程交换. os.execv
Ethaniz
2016-07-20 19:24:33 +08:00
@panda0 正解,你那个 subprocess 的命令只针对子进程,父进程没有用。这种需求还是直接上 shell 吧...

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

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

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

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

© 2021 V2EX