首页 > 解决方案 > QProcess中如何处理输入参数

问题描述

以下简单的 python 代码需要三个输入参数用于命令行中的“test.py”(除了“python”和“test.py”):

#!/usr/bin/python
import sys

def main(argv):
   if (len(sys.argv) < 4):
       print ('argv must be greater than 4')
   else:
     print ('Number of arguments:', len(sys.argv), 'arguments.')
     print ('Argument List:', str(sys.argv))

if __name__ == "__main__":
   main(sys.argv[1:])

运行 test.py:

C:\>python test.py arg1 arg2
argv must be greater than 4

C:\>python tt.py arg1 arg2 arg3
Number of arguments: 4 arguments.
Argument List: ['tt.py', 'arg1', 'arg2', 'arg3']

我使用以下简单的 Qt 代码,但无法产生上述结果。Qt 中有没有办法模仿上面的命令行,即'python 命令 arg1,... argN'。注意:在这种情况下必须使用“python”。

   QProcess *qtq = new QProcess();
   QString program("python");
   QStringList arguments("test.py arg1 arg2 arg3");
   qtq->setProgram(program);
   qtq->setArguments(arguments);
   qtq->start();
   qtq->waitForReadyRead();
   qtq->waitForFinished();
   QByteArray s =  qtq->readAll();
   qDebug() << s;

标签: qtparametersargumentsqprocess

解决方案


QStringList arguments("test.py arg1 arg2 arg3");

那是你的问题线。这将创建一个只有一个字符串的 QStringList,它作为一个参数传递给 python。你应该这样做:

QStringList arguments;
arguments << QString("test.py");   
arguments << QString("arg1");
arguments << QString("arg2");
arguments << QString("arg3");

推荐阅读