繁体   English   中英

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

[英]pass arguments from Qt to a shell script file

我想将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

字符串值应传递给“ $ *”以用作“文件”数组的参数。 请告诉我该怎么做。

您已经通过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。 你可以连接到成品readyReadStandardOutput以及误差信号和异步运行过程中或在一个单独的线程中运行它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM