如何从一个启动多个其他python脚本并发送参数?

时间:2011-07-20 15:12:11

标签: python windows

我要在Windows 7上启动并执行24个独立的python脚本。我希望一个脚本同时启动所有脚本...而不是统治它们(我不是Sauron)或等待它们的目的。我发现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")

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

4 个答案:

答案 0 :(得分:4)

您可以使用独立进程(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是健壮的,因为您不需要依赖stdout / err解析,也避免了相关的限制。 此外,您可以轻松管理更多子流程。

然后,您还可以设置您希望get调用等待多长时间的超时,例如:

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

答案 1 :(得分:2)

您想要使用子流程模块:http://docs.python.org/library/subprocess.html,特别是本小节中关于生成流程的第一个示例,而不等待它们完成http://docs.python.org/library/subprocess.html#replacing-the-os-spawn-family

答案 2 :(得分:1)

这样的事情?

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)

答案 3 :(得分:-1)

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

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