我多次启动一个可执行文件,除非是第一次写出文件。
""" Running hexlified codes from codefiles module prepared previously """
import tempfile
import subprocess
import os
import codefiles
if __name__ == '__main__':
p = os.path.join(os.curdir, 'Tools')
if not os.path.exists(p):
os.makedirs(p)
for fn, c in codefiles.exes:
fnp = os.path.join(os.curdir, 'Tools', fn)
if not os.path.exists(fnp):
# for some reason hexlified code is sometimes odd length and one nibble
if len(c) & 1:
c += '0'
c = c.decode('hex')
with open(fnp, 'wb') as f:
f.write(c)
print fnp
# this following line does not launch the second exe, but previous exe if exes existed
# but first exe twice
threading.Thread(target=lambda:subprocess.call([fnp])).start()
这里是开始后的截图(在将窗户从彼此移动之后)。 notepad.exe显示在打印但两个puttys开始。
答案 0 :(得分:2)
fnp
可能会在您lambda
执行时更改 - 您在这里遇到竞争条件,因此,如果在此期间执行的I / O数量可以隐藏或显示竞争条件,因为I / O减慢了速度。
要避免竞争条件,请将lambda:
更改为lambda fnp=fnp:
,以便在fnp
的创建点绑定lambda
值而不是在执行的晚些时候。