我正在尝试建立一个在科学集群上运行的python脚本。
将输入文件拆分为块,将它们一个提交给集群,对输出进行排序和评估,然后提交下一个块。
然而,我有一个奇怪的问题。
我在进程之前直接为子进程创建输入文件。但是,它从未奏效,并向我显示“无数据处理”错误。
我终于运行了这个片段:
tmp = open ("individual_list.txt","w")
for line in working:
tmp.write (line)
tmp.close
tmp.flush
os.fsync
time.sleep(60)
command=["srun"]
command.append ("--cpus-per-task=1")
command.append ("--chdir="+cwd)
command.append ("-o")
command.append (uniqueID+"#"+str(loop)+"_mut.out")
command.append (EXEC)
#command=[EXEC]
command.append ("-runfile")
command.append (CMD1)
out= open (uniqueID+"#"+str(loop)+"_mut.out","w")
p1=subprocess.Popen (command, cwd=cwd)
p1.wait()
out.close
你可能已经注意到我已经偏执了缓冲输出了。但仍然在等待的那一刻,文件individual_list.txt在文件系统中创建但是为空。 它只在子进程完成后才被填充。 这是一个python问题还是我必须向我们的集群管理员寻求帮助?
最佳, 扬
答案 0 :(得分:4)
您没有调用close
和flush
方法。您需要在()
之后执行此操作:
tmp.close()
tmp.flush()
etc.
否则,您只需要参考这些方法。以下是演示:
>>> def foo():
... return 'hi'
...
>>> foo
<function foo at 0x020B2540>
>>> foo()
'hi'
>>>