linux下调用python脚本,Linux下QT调用Python脚本的解决方案,Qt,python,一种,解决办法
最近在做一個(gè)深度學(xué)習(xí)對(duì)圖片中對(duì)象識(shí)別效果的檢測(cè)工具,其主要功能就是將自己標(biāo)注的圖片與識(shí)別結(jié)果圖片進(jìn)行對(duì)比然后計(jì)算識(shí)別的準(zhǔn)確等參數(shù),并提供原圖與結(jié)果圖片的顯示功能。
腳本主要完成識(shí)別與計(jì)算功能,QT完成數(shù)據(jù)的整理顯示與圖片的顯示。
我們可以直接用
qt的QProcess調(diào)用bash來(lái)執(zhí)行運(yùn)行腳本的命令
,獲取結(jié)果數(shù)據(jù)則有兩種方式:
一是在
python腳本中將結(jié)果寫到文本中,腳本結(jié)束后由qt讀取
。
二是在
腳本中用print按一定格式將結(jié)果輸出,在Qt中可用QProcess的信號(hào)槽機(jī)制獲取輸出結(jié)果
。
void TagDetection::startDetect_slot()
{
p = new QProcess(this);
//當(dāng)腳本中的結(jié)果全部(注意是全部)print完成后進(jìn)入到OnReadData_slot
connect(p, SIGNAL(readyReadStandardOutput()), this, SLOT(OnReadData_slot()));
//組合命令,帶入?yún)?/p>
QString labelsStr = QString::fromStdString(m_Vecmodels.at(m_CurrentLabel).types).split(" ").join("/");
QStringList cmdList;
cmdList<
<<:fromstdstring>
<<:fromstdstring>
<
<<:fromstdstring>
<<:fromstdstring>
<<:fromstdstring>
<<:fromstdstring>
<<:fromstdstring>
<<:fromstdstring>
<<:fromstdstring>
<<:fromstdstring>
<<:fromstdstring>
QString cmd = cmdList.join(" ");
qDebug()<
//開始執(zhí)行
p->start(cmd);
//等待提示框
QApplication::setOverrideCursor(Qt::WaitCursor);//設(shè)置鼠標(biāo)為等待狀態(tài)
QProgressDialog progress;
progress.setWindowTitle(codecMain->toUnicode("提示"));
progress.setLabelText(codecMain->toUnicode("正在檢測(cè)中..."));
progress.setCancelButton(false);
progress.setRange(0, 60000);//設(shè)置范圍
progress.setModal(true);//設(shè)置為模態(tài)對(duì)話框
progress.show();
for (int i = 0; i < 3000 ; i++)
{
QThread::msleep(100);
QCoreApplication::processEvents(QEventLoop::ExcludeUserInputEvents);
progress.setValue(i);
//進(jìn)入槽函數(shù)則停止等待
if(g_IsDetectedDone)
{
g_IsDetectedDone = false;
break;
}
//用戶取消的話則中止
if (progress.wasCanceled())
{
break;
}
}
QApplication::restoreOverrideCursor();
progress.close();
QMessageBox::warning(this, codecMain->toUnicode("提示"), codecMain->toUnicode("檢測(cè)結(jié)束!"));
}
槽函數(shù)如下:
//識(shí)別完成
void TagDetection::OnReadData_slot()
{
//改變標(biāo)志位停止等待
g_IsDetectedDone = true;
//獲取結(jié)果
QString Pyresult = codecMain->toUnicode(p->readAllStandardOutput());
qDebug()<
ui.textEdit->setText(Pyresult);
//關(guān)閉bash
p->kill();
p->close();
delete p;
//數(shù)據(jù)處理...
//或者讀取識(shí)別結(jié)果文本
QFile file("result.txt");
QStringList result;
if (file.open(QIODevice::ReadOnly | QIODevice::Text))
{
while (!file.atEnd())
{
//按行讀取
QByteArray line = file.readLine();
QString str(line);
result.append(str);
qDebug() << str;
}
file.close();
}
//數(shù)據(jù)處理...
}
總結(jié)
以上是生活随笔為你收集整理的linux下调用python脚本,Linux下QT调用Python脚本的解决方案,Qt,python,一种,解决办法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 安徽科技学院计算机二级,安徽科技大学20
- 下一篇: 新买的u盘不显示内存不足怎么办啊 U盘内