lambda函数调用子进程启动一个可执行文件的多个副本

时间:2015-01-11 18:11:12

标签: python lambda subprocess

我多次启动一个可执行文件,除非是第一次写出文件。

""" 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开始。 enter image description here

1 个答案:

答案 0 :(得分:2)

fnp可能会在您lambda执行时更改 - 您在这里遇到竞争条件,因此,如果在此期间执行的I / O数量可以隐藏或显示竞争条件,因为I / O减慢了速度。

要避免竞争条件,请将lambda:更改为lambda fnp=fnp:,以便在fnp创建点绑定lambda值而不是在执行的晚些时候。