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

标签 c++ linux qt shell qprocess

我想将一个字符串值从 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

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

最佳答案

您已经通过 QProcess::startarguments 参数将脚本作为参数传递给字符串列表中的 /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。您可以连接到 finishedreadyReadStandardOutput以及错误信号并异步运行该过程或在单独的线程中运行它。

关于c++ - 将参数从 Qt 传递到 shell 脚本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37909455/

相关文章:

linux - 'sed' 可以做 'or' 类修整吗?

linux - 一些 linux 程序中奇怪的描述符关闭

c++ - QTcpSocket 发送的数据比想要的多 - Qt/C++

qt - 如何使用 QVector 作为二维数组?

Android JNI ndk-构建错误 : 'jni' has not been declared

C++:以最简单和最干净的方式将值写入文件?

linux - 在永恒的 bash 循环中调用 nc 后清理

c++ - 如何将 QEvents 传递给子部件?

命名空间前缀解析和优化级别依赖性中带有 extern "C"的 C++

c++ - 根据用户输入从模板创建对象