我在python中使用多处理模块来并行启动几个进程。这些过程彼此独立。他们生成自己的输出并将结果写入不同的文件。每个进程使用subprocess.call方法调用外部工具。 它工作正常,直到我发现外部工具中的问题,由于某些错误情况,它进入'提示'模式并等待用户输入。现在在我的Python脚本中,我使用join方法等待所有进程完成其任务。这导致整个事情等待这个错误的子进程调用。我可以为每个进程设置一个超时时间,但是我不知道每个进程会持续多久,因此这个选项被排除了。Python多处理 - 发送输入到子进程
如何判断是否有子进程正在等待用户输入,以及如何向其发送“退出”命令?任何指向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()
感谢Cartroo的想法。我会尝试将它们合并到脚本中。会让你知道哪一个工作。 – Kranthi
dev/null似乎工作正常。谢谢您的帮助。我将尝试其他选择,以查看是否可以在Python中执行此操作,以便更好地理解此主题。 – Kranthi
非常欢迎你,很高兴你的工作。无论如何,希望其他建议可能对未来有用。 – Cartroo