• 2498阅读
  • 2回复

为什么qt 调用python脚本,里面的print函数,有时候可以在qt控制台上打印出来,有时候不可以呢?? [复制链接]

上一主题 下一主题
离线foxgod
 

只看楼主 倒序阅读 楼主  发表于: 2019-11-26
  代码如下
  1. Py_Initialize();
  2.      if ( !Py_IsInitialized() )
  3.      {
  4.      return -1;
  5.      }
  6.      // 将Python工作路径切换到待调用模块所在目录,一定要保证路径名的正确性
  7.      PyRun_SimpleString("import sys");
  8.      QString setSysPath = QString("sys.path.append('%1')").arg(QCoreApplication::applicationDirPath());
  9.      PyRun_SimpleString(setSysPath.toStdString().c_str());
  10.      PyObject* pModule = PyImport_ImportModule("server");  // 这里的test_py就是创建的python文件
  11.      if (!pModule)
  12.      {
  13.              qDebug()<< "Cant open python file!\n" << endl;
  14.              return -1;
  15.      }
  16.      PyObject* pFunhello= PyObject_GetAttrString(pModule,"usps");  // 这里的usps就是python文件定义的函数
  17.      if(!pFunhello)
  18.      {
  19.          qDebug()<<"Get function hello failed"<<endl;
  20.          return -1;
  21.      }
  22.      else
  23.      {
  24.        PyObject_CallFunction(pFunhello,NULL);
  25.        while(true)
  26.        {
  27.            PyObject* pFunhello1= PyObject_GetAttrString(pModule,"udp_msglist");  // 这里的hellow就是python文件定义的函数
  28.            if(!pFunhello1)
  29.            {
  30.                qDebug()<<"Get function udp_msglist failed"<<endl;
  31.                return -1;
  32.            }
  33.            PyObject* pReturn= PyObject_CallFunction(pFunhello1,NULL);
  34.            char* cc=NULL;
  35.            int result=-1;
  36.            if(pReturn==NULL)
  37.            {
  38.                qDebug()<<"cc is null";
  39.            }
  40.            else
  41.            {
  42.                //PyArg_Parse(pReturn,"s",&cc);
  43.                PyArg_ParseTuple(pReturn,"s|i",&cc,&result);
  44.                if(!QString(QLatin1String(cc)).isEmpty())
  45.                {
  46.                    qDebug()<<"cc is"<<QString(QLatin1String(cc))<<result;
  47.                }
  48.            }
  49.        }
  50.      }
调用附件里面的py文件,print输出的log,怎么样可以在QT应用程序输出里面看到呢??,我实验了集中程序,控制台程序可以答应出来,窗口程序就打印不出来,什么原因 test.txt (2 K) 下载次数:0

离线nishiwoenaad

只看该作者 1楼 发表于: 2019-11-29
  • 环境配置

1,确认在.pro文件中添加python的lib库
  • 运行

  1. [size=3][color=#4d4d4d][font= ]Py_SetPythonHome(“python路径”); //指定python路径[/font][/color][/size]
  2.     Py_Initialize();
  3.     if ( !Py_IsInitialized() )
  4.     {
  5.         return ;
  6.     }
  7.     //导入hello.py模块
  8.     PyObject* pModule = PyImport_ImportModule("hello");
  9.     if (!pModule)
  10.     {
  11.         return ;
  12.     }
  13.     //获取hello模块中的hello函数
  14.     PyObject* pFunhello= PyObject_GetAttrString(pModule,"hello");
  15.     if(!pFunhello)
  16.     {
  17.         return ;
  18.     }
  19.     //调用hello函数
  20.     PyObject_CallFunction(pFunhello,NULL);
  21.     //结束,释放python
  22.     Py_Finalize();



离线guihua8000

只看该作者 2楼 发表于: 2020-08-28
              
asdsadasdasdasdad
快速回复
限100 字节
 
上一个 下一个