擅长:python、mysql、java
<p>考虑使用咨询锁定来阻止,直到进程退出:</p>
<pre><code>lockfile=open(tmpfile, 'a')
subprocess.check_call([
"wine", "/home/acteam/.wine/drive_c/Program Files (x86)/PeaZip/peazip.exe",
"-ext2here", to_wine_path(tmpfile)],
preexec_fn=lambda: fcntl.flock(lockfile, fcntl.LOCK_EX),
close_fds=False)
fcntl.flock(lockfile, fcntl.LOCK_EX)
</code></pre>
<p>在这里,我们的<code>preexec_fn</code>(在<code>fork()</code>关闭子进程之后,但在<code>wine</code>启动之前运行)获取一个锁,<code>check_call()</code>返回后,我们尝试自己获取该锁,如果它尚未释放,它将被阻塞。在</p>
<p>(请注意,您需要确保wine不会在程序退出之前关闭该文件描述符;如果确实关闭了,一种避免这种情况的方法是在作为stdin、stdout或stderr传递的描述符上创建锁)。在</p>