擅长:python、mysql、java
<p>为了使Python脚本的执行与子C进程同步,您可以使用通信,例如,在Python执行某些操作时,将一个字节写入C程序中的stdout<code>putchar('\0')</code>,并尝试读回一个char<code>getchar()</code>以继续执行,在Python脚本中则相反:读取一个字节,开始做某事,并将字节写入信号C程序以继续:</p>
<pre><code>from subprocess import Popen, PIPE
# start child process, do not block Python
p = Popen("./prog", stdin=PIPE, stdout=PIPE, bufsize=0)
while p.poll() is None: # while C program is running
# block here until C program writes a byte and flushes its stdout buffer
if not p.stdout.read(1): # EOF
break
# .. do something while C program waits
p.stdin.write(b'\0') # signal C program to continue
</code></pre>
<p>要在C中解除缓冲标准输出,请在C程序的最开始处调用:</p>
<pre><code>setvbuf(stdout, NULL,_IONBF,0);
</code></pre>
<p>否则,在显式调用<code>fflush()</code>或相应的缓冲区溢出之前,Python程序不会看到任何输出。你知道吗</p>