对启动一个可执行文件的多个副本的子进程的 lambda 函数调用
lambda function call to subprocess launching multiple copies of one executable
我多次启动一个可执行文件,第一次写出文件时除外。
""" 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()
此处为开始后的屏幕截图(将 windows 从彼此移开后)。 notepad.exe 显示在印刷品中,但两个腻子开始了。
fnp
可能会在您的 lambda
执行时更改——您这里有一个竞争条件,因此,如果同时执行的 I/O 数量可以隐藏或显示竞争条件,因为 I/O 会减慢速度。
为避免竞争条件,将 lambda:
更改为 lambda fnp=fnp:
以在 创建 时绑定 fnp
值lambda
而不是稍后 执行 .
我多次启动一个可执行文件,第一次写出文件时除外。
""" 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()
此处为开始后的屏幕截图(将 windows 从彼此移开后)。 notepad.exe 显示在印刷品中,但两个腻子开始了。
fnp
可能会在您的 lambda
执行时更改——您这里有一个竞争条件,因此,如果同时执行的 I/O 数量可以隐藏或显示竞争条件,因为 I/O 会减慢速度。
为避免竞争条件,将 lambda:
更改为 lambda fnp=fnp:
以在 创建 时绑定 fnp
值lambda
而不是稍后 执行 .