我的Python程序准备输入,运行一个外部的Fortran代码,并在Windows HPC 2008环境处理的输出。 它的伟大工程,除非代码执行1042至45年时间之间的外部程序(通常情况下,问题较早收敛)。 在这种情况下,我得到一个异常:
WindowsError:[错误206]的文件名或扩展名是太长
然而,路径文件名不随时间增长。 这只是清理目录并再次运行。
下面的代码:
inpF = open(inName)
outF = open(localOutName,'w')
p = subprocess.Popen(pathToExe,shell=False,stdin=inpF,stdout=outF,cwd=runPath)
stdout, stderr = p.communicate()
outF.close()
inpF.close()
pathToExe是常数串指向UNC位置(例如\\服务器\共享\的Program.exe),标准输入是在只读模式打开文件的本地驱动器上,stdout是在写模式下打开文件的本地驱动器上和CWD是C上的本地路径:\驱动器。 我已经证实,没有一个参数子长度超过80个字符,即使限制应该是32,768,根据这个有点相关的帖子 。
我究竟做错了什么? 不知怎的,事情正在积累,当我跑了一千次才成为一个问题。
更新:
为了测试“打开的文件太多”的假设,我做了一个不同的可执行文件运行速度很快一个非常小的例子。 这里的主要区别是,标准输入和stdout都只是空文件在这里,而在上述情况下,他们都是大文件。 在这种情况下,代码运行只是罚款2000下运行,而在更早〜1042失败。 所以,它不只是有很多文件。 也许有太多的大文件打开?
import subprocess
for i in range(nRuns):
if not (i % (nRuns/10.0)):
print('{0:.2}% complete'.format(i/float(nRuns)*100))
inpF=open('in.txt')
outF=open('out.txt','w')
p = subprocess.Popen('isotxsmerge.exe',shell=False,stdin=inpF,
stdout=outF,cwd='.')
stdout, stderr = p.communicate()
outF.close()
inpF.close()