QProcess 将参数传递给 python 脚本

QProcess passing arguments to a python Script

本文关键字:python 脚本 参数传递 QProcess      更新时间:2023-10-16
from PIL import Image
def porcentaje(path):
    im = Image.open(path, "r")
    im.show()
    width, height = im.size
    type = im.mode
    format = im.format
    pixels=im.getdata()
    n = len(pixels)
   im=im.load()
   nblack = 0
   noblack=0
   for pixel in pixels:
       if pixel < 50:
           nblack += 1
       else:
           noblack+=1
porcentajefinal=(nblack*100)/n
print(porcentajefinal)
return(porcentajefinal)
(porcentaje(path))

主窗口.cpp (QT 创建者(

void MainWindow::on_pushButton_2_clicked()
{
    QString path = QFileDialog::getOpenFileName(this,
            tr("All Files (*)"));
     qDebug()<<path;
     QDir dir1("D:/QTCProjects/prueba");
     QFile file1("D:/QTCProjects/prueba/2_1.py");
     QString script1 = "D:/QTCProjects/prueba/2_1.py";
     QFile file2(script1);
     qDebug() << dir1.exists() << file1.exists() << file2.exists();
       //  these all result in true, true true
     QProcess *myProcess = new QProcess();
     myProcess->start("python.exe D:/QTCProjects/prueba/2_1.py" );
     myProcess->waitForFinished(-1);
      qDebug() << "myProcess:" << myProcess->readAll(); }

这个 python 需要一个名为 path 的变量才能运行,我在 qtcreator 中使用 Qstring 路径获取此变量,我如何使用 Qprocess 为 python 提供此变量。

如果要通过终端将参数传递给脚本,请使用以下结构:

python.exe /path/of/your_script.py arg1 arg2 ... argn

然后要获取参数,我们必须使用 sys.argv,它是一个存储以下内容的列表:

['/path/of/your_script.py', 'arg1', 'arg2', ..., 'argn']

因此,在您的情况下,您应该通过以下方式获取参数 sys.argv[1]

2_1.py

from PIL import Image
import sys
def porcentaje(path):
    im = Image.open(path, "r")
    im.show()
    width, height = im.size
    type = im.mode
    format = im.format
    pixels=im.getdata()
    n = len(pixels)
    im=im.load()
    nblack = 0
    noblack=0
    for pixel in pixels:
        if pixel < 50:
            nblack += 1
        else:
            noblack+=1
    porcentajefinal=(nblack*100.0)/n
    print(porcentajefinal)
    return(porcentajefinal)
path = sys.argv[1]
porcentaje(path)

在Qt方面,python.exe是主程序,其他参数是参数,所以你的代码必须具有以下结构:

void MainWindow::on_pushButton_2_clicked()
{
    QString path = QFileDialog::getOpenFileName(this, "All Files (*)");
    qDebug()<<path;
    if(!path.isEmpty()){
        QDir dir("D:/QTCProjects/prueba");
        QFileInfo info(dir, "2_1.py");
        qDebug() << dir.exists() << info.exists();
        QProcess process;
        process.start("python.exe", QStringList()<< info.absoluteFilePath() << path);
        process.waitForFinished(-1);
        qDebug() << "myProcess:" << process.readAll();
    }
}