CGI 中须要调用一个 Python 脚本,脚本去更新执行 update 的 sql 语句,时间较长,超过了 Web 服务器的最大链接时间,所以须要使用异步调用脚本的方式。node
char command[300] = "~/tools/read_emoji_text.py"; iRet = system(command); MMJsonOutput *pOutResult = new MMJsonOutput; pOutResult->GetResult()["errcode"] = iRet; pOutResult->GetResult()["msg"] = "upload file success";`
很明显,Python 脚本执行完后才给请求返回数据linux
if (0 == fork()) { char command[300] = "~/tools/read_emoji_text.py"; iRet = system(command); _exit(127); } else { MMJsonOutput *pOutResult = new MMJsonOutput; pOutResult->GetResult()["errcode"] = iRet; pOutResult->GetResult()["msg"] = "upload file success"; return pOutResult; }
主进程直接返回数据,在子进程中去调用同步的 system 函数,执行 Python 脚本。这里还可使用更底层的 execl 系统调用来执行脚本。sql
使用异步的方式,iRet 的返回值一直为 256,至关于 read_emoji_text.py 执行返回值为 256 >> 8 = 1。出现这个错误的缘由是打开文件的路径写的是相对路径,而二进制在执行时并非在这个路径。服务器
def get_mark_data(): file = open("~/tools/emoji_data") revise_list = []