如何检查一个文件是否打开在Python中的窗口上写?

我们在这里有一个工作在input文件由SAS创build。 该input文件然后由遗留应用程序读取,并且遗留应用程序创build结果。 然后SAS读取结果并对其进行总结。 一个非程序员通常会逐一处理这些操作。 所以这个人只是创buildinput文件。 他们知道什么时候完成,然后他们运行遗留的应用程序,他们知道什么时候完成。 然后他们运行汇总程序。

我有一个情况,我的老板想要运行大约100个变化。 我有权访问3台或4台共享networking驱动器的计算机。 这是我的计划:使用电脑A,我开始创build100个input文件,一个接一个。 使用计算机B,我在每个input文件上运行传统程序。 input准备就绪后,我想开始运行程序。 所以,如果input1完成在计算机A上创build,我想在计算机B上的input1上运行遗留应用程序,而在计算机A上创buildinput2。我知道python最好的,所以我可能会使用python将所有这一切粘合在一起。

现在我知道有很多事情可以做,但是我认为这种做法是足够的,可以让我暂时完成工作。 我没有时间去devise和testing一个非常优雅的解决scheme,它可以利用所有机器上的所有内核,或者使用数据库来帮助我同步所有这些。 我喜欢这样的build议, 但我真的只是想知道是否有一种方法,在python中,以确定networking驱动器上的文件是否可以通过任何应用程序在任何计算机上写入? 如果没有,我可能会想出一个愚蠢的方式来创build一个工作完成的指示器,比如创build一个文件“doneA”,如果存在的话,这意味着“input1”文件已经完成。 例如。 我会向创buildinput文件后创build指标文件的sas程序添加一个步骤。

对不起,很长的解释,但我只是不希望你浪费你的时间提供替代解决scheme,我可能无法实现。

我已经读过这个问题及其答复。 我不认为我可以使用任何像lsof b / c这些文件将在不同的计算机上打开。

将输出写入临时文件。 写完后,关闭它,然后重命名为其他程序正在等待的名称。 这样,文件只有在准备好被读取时才会出现。

如果有一种方法,在python,告诉如果一个网络驱动器上的文件是开放的任何应用程序在任何计算机上写入?

不是真的。

Windows会让你打开文件几次,真的把事情弄糟。

你必须使用一些明确的同步。 而不是以100种不同的方式同步三个步骤中的每一个,我的首选是做下面的事情。 创建100步三步跳舞的副本。 不要担心步骤之间的同步。

for variant in range(100): name= "variant_{0}.bat".format(variant) with open(name,"w") as script: print( "run some SAS thing", file=script ) print( "run some legacy thing", file=script ) print( "run some SAS thing", file=script ) subprocess.Popen( "start {0}".format(name), shell=True ) 

我怀疑这将通过并行运行全部100个处理器来破坏处理器的寿命。

实际上,你可能不想在Python中使用subprocess.Popen() 。 实际上,您可能需要创建几个可以并行运行几个变体的“启动变体_x”批处理文件。 您可以创建一些运行一系列处理步骤的主bat文件。 每个步骤都会启动几个并行的3步骤变体。