1

我想做的是有一个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.pystuff.py在同时。

如果在 windows/linux 中有单独的方法可以做到这一点,请问,你能同时显示吗?

4

4 回答 4

5

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

例子:

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

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

于 2012-06-14T06:48:08.210 回答
1

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

于 2012-06-14T06:50:02.057 回答
1

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

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

或者,正如其他人指出的那样,使用该subprocess模块。实际上,subprocess应该是一种反射-您在启动其他进程时要使用的工具...

于 2012-06-14T06:55:21.720 回答
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')])
于 2012-06-14T08:01:04.910 回答