如何从一个启动多个其他的Python脚本,并发送它们的参数?

我必须在Windows 7上启动并执行24个独立的Python脚本。我希望这个脚本可以同时启动它们,而不必统治所有的(我不是索隆)或者等待它们的结束。 我发现os.startfile()很有趣。 但是我没有成功向这24位发表意见。

coincoin1.py(将被启动的24脚本之一)

import sys print "hello:",sys.argv 

Anti_Sauron_script.py(将一起启动24的那个)

 sys.argv=["send","those","arguments"] os.startfile("C:\\Users\\coincoin1.py") 

如何将参数发送到这些脚本并一起启动它们?

Solutions Collecting From Web of "如何从一个启动多个其他的Python脚本,并发送它们的参数?"

您可以使用独立进程(multiprocessing.Process),并使用两个队列与其进行通信(multiprocessing.Queue),其中一个用于输入,另一个用于输出。 启动过程示例:

 import multiprocessing def processWorker(input, result): work = input.get() ## execute your command here pipe = subprocess.Popen(command, stdout = subprocess.PIPE, stderr = subprocess.PIPE, shell = True) stdout, stderr = pipe.communicate() result.put(pipe.returncode) input = multiprocessing.Queue() result = multiprocessing.Queue() p = multiprocessing.Process(target = processWorker, args = (input, result)) p.start() commandlist = ['ls -l /', 'ls -l /tmp/'] for command in commandlist: input.put(command) for i in xrange(len(commandlist)): res = result.get(block = True) if not res is 0: print 'One command failed' 

然后,您可以跟踪每个子进程执行哪个命令,只是简单地存储与workid关联的命令(当队列被新工作填满时,workid可以是一个递增的计数器)。 multiprocessing.Queue的使用是健壮的,因为你不需要依靠标准输出/ err解析,你也避免了相关的限制。 而且,您可以轻松管理更多的子流程。

然后,你也可以设置一个超时时间,你需要一个get调用等待最长时间,例如:

 import Queue try: res = result.get(block = True, timeout = 10) except Queue.Empty: print error 

你想使用subprocess模块​​: http : //docs.python.org/library/subprocess.html ,特别是本小节中的第一个例子,在产卵过程中不等待它们完成http://docs.python.org/库/ subprocess.html#替换最OS-产卵家庭

像这样的东西?

 from subprocess import Popen, PIPE python_scripts = ['coincoin1.py','coincoin2.py','coincoin3.py'...] args = ' -w hat -e ver' procs = [] for f in python_scripts: procs.append(Popen(f+args, shell=True,stdout=PIPE,stderr=PIPE)) results = [] while procs: results.append (procs.pop(0).communicate()) do_something_with_results(resuls) 

使用子流程模块(http://docs.python.org/library/subprocess.html#module-subprocess)中的调用函数。

 import subprocess subprocess.call([path, arg1, arg2...])