将参数从 Qt 传递到 shell 脚本文件

Posted

技术标签:

【中文标题】将参数从 Qt 传递到 shell 脚本文件【英文标题】:pass arguments from Qt to a shell script file 【发布时间】:2016-06-19 16:33:39 【问题描述】:

我想将 Qt 代码中的字符串值传递给名为“part1_4_md”的 shell 脚本文件。这是我的 Qt 代码:

void MainWindow::on_pushButton_clicked()


    QString path = ui->lineEdit->text();

    QProcess *process = new QProcess;
    process->start("/bin/bash", QStringList() << "/home/kha/Unix/QT/part1_4_md");
    process->waitForBytesWritten();
    process->waitForFinished();

    QString output(process->readAllStandardOutput());
    ui->textEdit->setPlainText(output); 
    QTextCursor textCursor = ui->textEdit->textCursor();
    textCursor.movePosition(QTextCursor::Start, QTextCursor::MoveAnchor, 1);


我创建了一个 lineEdit 框,当用户在该框中键入字符串值并按下按钮时,我需要将该值传递给我的 shell 脚本文件,并且 shell 脚本文件使用该值来运行。这是我的 shell 脚本文件的样子:

#!/bin/bash

files=($*);
dates=();

for (( i = 0; i<$#files[@]; i++ ))
do
    dates[$i]=$(date -r $files[i] +"%Y%m%d");

done

字符串值应传递给“$*”以用作“文件”数组的参数。请告诉我如何做到这一点。

【问题讨论】:

您应该使用doc.qt.io/qt-5/qprocess.html#setArguments,顺便说一句,您不应该从 UI 线程启动并等待 QProcess。这是错误的。 【参考方案1】:

您已经通过QProcess::start 的arguments 参数将脚本作为参数传递给字符串列表中的/bin/bash。您可以将更多参数附加到列表中,并且 bash 应该能够将 path 解释为脚本的第一个参数。

QString path = ui->lineEdit->text();
QString script("/home/kha/Unix/QT/part1_4_md");
QProcess *process = new QProcess;
process->start("/bin/bash", QStringList() << script << path);

如果这不起作用,您可以使用 bash 的 -c 选项。

QString path = ui->lineEdit->text();
QString script("/home/kha/Unix/QT/part1_4_md");
QString command_string = script + " " + path;
QString c_option("-c");
QProcess *process = new QProcess;
process->start("/bin/bash", QStringList() << c_option << command_string);

请注意,您通过在 GUI 线程中等待进程来阻塞您的 UI。您可以连接到finished 和readyReadStandardOutput 以及错误信号并异步运行进程或在单独的线程中运行。

【讨论】:

以上是关于将参数从 Qt 传递到 shell 脚本文件的主要内容,如果未能解决你的问题,请参考以下文章

shell脚本从入门到复杂三(传递参数)

将参数从 shell 脚本传递到 hive 脚本

将外部参数传入awk命令的方法汇总

从 udev 规则文件向 shell 脚本传递参数

参数传递:shell脚本调用一个带参数的python函数

试图了解如何将参数从 gradle 传递到我的 shell 脚本?