我正在使用 python 中的多处理模块来并行启动几个进程。这些过程是相互独立的。他们生成自己的输出并将结果写在不同的文件中。每个进程使用 subprocess.call 方法调用一个外部工具。它工作正常,直到我在外部工具中发现一个问题,由于某些错误情况,它进入“提示”模式并等待用户输入。现在在我的 python 脚本中,我使用 join 方法等待所有进程完成它们的任务。这导致整个事情等待这个错误的子进程调用。我可以为每个进程设置一个超时,但我事先不知道每个进程将运行多长时间,因此排除了此选项。
如何确定是否有任何子进程正在等待用户输入以及如何向其发送“退出”命令?对python中相关模块的任何指针或建议将不胜感激。
我的代码在这里:
import subprocess
import sys
import os
import multiprocessing
def write_script(fname,e):
f = open(fname,'w')
f.write("Some useful cammnd calling external tool")
f.close()
subprocess.call(['chmod','+x',os.path.abspath(fname)])
return os.path.abspath(fname)
def run_use(mname,script):
print "ssh "+mname+" "+script
subprocess.call(['ssh',mname,script])
if __name__ == '__main__':
dict1 = {}
dict['mod1'] = ['pp1','ext2','les3','pw4']
dict['mod2'] = ['aaa','bbb','ccc','ddd']
machines = ['machine1','machine2','machine3','machine4']
log_file.write(str(dict1.keys()))
for key in dict1.keys():
arr = []
for mod in dict1[key]:
d = {}
arr.append(mod)
if ((mod == dict1[key][-1]) | (len(arr)%4 == 0)):
for i in range(0,len(arr)):
e = arr.pop()
script = write_script(e+"_temp.sh",e)
d[i] = multiprocessing.Process(target=run_use,args=(machines[i],script,))
d[i].daemon = True
for pp in d:
d[pp].start()
for pp in d:
d[pp].join()