我们有一个C ++程序,有时这个程序需要执行用户定义的批处理/ shell / ant脚本。我们无法控制此脚本的运行方式。有没有办法从C ++程序获取返回代码?
像: exec a script.sh> status.tmp?
我们需要同时支持Windows和Linux。
有什么想法吗?
答案 0 :(得分:8)
另一个简单的方法就是使用marco WEXITSTATUS获得回报。几乎与使用waitpid调用获取子进程的返回值的方式相同(在基于Unix的系统中)。
以下是示例程序。我有一个C / C ++程序和一个简单的bash脚本。
示例bash脚本
#!/bin/bash
echo "I am in Script"
exit 5;
示例C / C ++程序
int i, ret = system("./b.sh 2>&1 > /dev/null");
i=WEXITSTATUS(ret);
printf("My val= %d\n",i);
输出
./a.out
My val= 5
如果您想要更高级的方法从脚本中获得多个返回代码或想要一个交互式会话,那么您应该使用popen
希望这有帮助。
答案 1 :(得分:0)
只需使用
int ret=system("myshellscrtipt.sh");
因为脚本的返回值是系统函数的返回值。 在Windows中我不知道是否有类似的功能。 如果你使用Qt工具包,你可以做这样的事情
QProcess process;
process.start( "yourShellCommand", QStringList( args );
这将是真正的跨平台..
答案 2 :(得分:0)
在bash中,状态代码存储在一个特殊变量中:
C:/myprogram.exe
echo $?