作者lionel20002 (遥かなソラ)
看板Python
标题[问题] subprocess问题
时间Fri Jun 24 09:50:10 2016
手边有一个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
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 203.160.153.142
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1466733015.A.72A.html
1F:→ uranusjr: 你送完要 flush 不然可能会被 OS 做 buffering 06/24 12:45
目前在python端
fpi_c.stdin.write(str(123)+"\n") 之後加上
fpi_c.stdin.flush()
以及C
printf 後加上 fflush(stdout)
目前还是当在同个地方
※ 编辑: lionel20002 (203.160.152.158), 06/24/2016 13:09:42
2F:→ alibuda174: 不要用stdout.read,改用communicate试试 06/24 14:56
3F:→ lionel20002: 楼上的试过 目前找到一点端倪 等下自己回一篇 06/24 15:17
4F:推 Sunal: ZMQ很好用的 06/24 17:55