如何作为python脚本单独执行python文件?

时间:2012-06-14 06:39:25

标签: python

我想要做的是有一个python脚本(这是一个python IRC bot),它可以在后台/单独运行另一个python脚本。

我可以这样做:

#irc codey stuff here...
if x == y:
    os.system('s%\stuff.py') % path 

但这会停止 main.py ,然后运行 stuff.py (在1个命令提示符下),我不想这样做。
所以我试图让这个脚本做的是当IRC机器人通过IRC获取命令时,我希望它分别运行stuff.py,比如双击 stuff.py 并拥有 main.py stuff.py 同时运行。

如果在windows / linux中有另外一种方法,请同时显示两者吗?

4 个答案:

答案 0 :(得分:5)

要生成后台进程,请在子进程模块中使用Popen类。

示例:

from subprocess import Popen
process = Popen(['firefox', '-P', '-no-remote'])

process之后是一个可以用来杀死进程的进程对象,等待它完成,与之通信等等。如果你只想生成进程并忘记它,你就不要需要保持Popen的返回值。

答案 1 :(得分:1)

subprocess库可能很有用。它允许后台进程并为您处理一些分叉和子管理。

答案 2 :(得分:1)

要在Windows中打开单独的shell,您可以执行以下操作:

os.system('cmd.exe /c stuff.py')

或者,正如其他人所指出的那样,使用subprocess模块。实际上,subprocess应该是一个反射 - 当你开始其他过程时你抓住的工具......

答案 3 :(得分:0)

要在后台执行CPU密集型Python代码,可以使用multiprocessing

import multiprocessing as mp
from stuff import some_function

if __name__=='__main__':
   pool = mp.Pool()
   # ...
   if x == y:
      pool.apply_async(some_function, args) # use mp.Queue or 
                                            # save returned value or 
                                            # specify a callback
                                            # to get deferred result from the function

如果你走subprocess路线然后使用与当前脚本相同的Python启动器,你可以尝试sys.executable

import os
import sys
from subprocess import Popen

p = Popen([sys.executable, os.path.join(path, 'stuff.py')])