[问题] subprocess问题

楼主: lionel20002 (遥かなソラ)   2016-06-24 09:50:10
手边有一个python的GUI,另外开了一个C的subprocess
目前signal从python丢到C或是C丢到python都正常收到
但是资料的收送有些问题
Python Code:
fpi_c = subprocess.Popen(["./FPI_sig"],stdin=subprocess.PIPE,stdout=subprocess.PIPE)
def handle_inform_from_c(signum, frame):
print("receved:", signum)
outstr = fpi_c.stdout.read()
print outstr
signal.signal(signal.SIGUSR1, handle_inform_from_c)
def gui_sense_and_save_fpi_2():
fpi_c.stdin.write(str(123)+"\n")
os.kill(fpi_c.pid,signal.SIGUSR1)
gui_sense_and_save_fpi_2接一个按钮 按下去会送资料跟SIGUSR1给C程式
C code:
void signal_callback_handler2(int signum)
{
int gpid;
scanf("%d",&gpid);
printf("Caught signal %d\n",signum);
//fclose(stdout);
signal(SIGUSR1, signal_callback_handler2);
kill(getppid(),SIGUSR1);
}
int main()
{
signal(SIGUSR1, signal_callback_handler2);
while(1)
{
sleep(0.5);
}
return EXIT_SUCCESS;
}
目前如果加上fclose(stdout),python端就可以收到C print出来的"Caught signal XXX"
但是因为stdout close了 再传资料就会显示PIPE坏掉无法传
没有fclose(stdout)会当在python的outstr = fpi_c.stdout.read()
感觉好像是python一直在等C执行结束才会收值 但是C只会一直等signal不会自己结束
所以就卡死?
或者是subprocess.PIPE的管理根本就不对?
昨天一整天都在找资料跟尝试 还是无法搞定
怎样才能让资料正常收送 恳请高手帮忙m(_ _)m
作者: uranusjr (←這人是超級笨蛋)   2016-06-24 12:45:00
你送完要 flush 不然可能会被 OS 做 buffering
作者: alibuda174 (阿哩不达)   2016-06-24 14:56:00
不要用stdout.read,改用communicate试试
楼主: lionel20002 (遥かなソラ)   2016-06-24 15:17:00
楼上的试过 目前找到一点端倪 等下自己回一篇
作者: Sunal (SSSSSSSSSSSSSSSSSSSSSSS)   2016-06-24 17:55:00
ZMQ很好用的

Links booklink

Contact Us: admin [ a t ] ucptt.com