windows qt使用cmd执行命令

以下是采用 Qprocess实现 ,当然可以使用syetem实现

问题代码:

#include <QCoreApplication>
#include <QProcess>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    // 指定文件名和路径
    QString filePath = "a.txt";

    // 创建QProcess对象
    QProcess process;

    // 启动命令行
    process.start("cmd.exe");

    // 等待命令行启动
    if (!process.waitForStarted())
    {
        qDebug() << "无法启动命令行";
        return 1;
    }

    // 发送命令切换到D盘
    process.write("D:\n");

    // 发送命令切换到D/myData目录
    process.write("cd myData\n");

    // 发送命令创建文件并写入内容
    QString command = QString("echo Hello, world! > \"%1\"").arg(filePath);
    process.write(command.toLocal8Bit() + '\n');

    // 关闭输入通道,等待命令完成
    process.closeWriteChannel();
    process.waitForFinished();

    qDebug() << "文件创建和写入成功:" << filePath;

    return a.exec();
}

以上命令无法在我指定目录下下写一个文档,只能在我当前运行的可执行文件下写a.txt。
原因:
可以连续向 QProcess 的输入通道发送多个命令。但是,在 QProcess 的上下文中,每个命令都是在一个独立的子进程中执行的,因此每个命令之间的状态不会被传递。这就是为什么在你的要求中,需要在切换目录的命令和创建文件的命令之间保持状态,而这在不同的子进程中是不容易做到的。

正确代码1(在虚拟环境下运行代码)

第一步 切换到指定目录下
第二步激活虚拟环境
第三步运行python文件

代码实现

#include <QCoreApplication>
#include <QProcess>
#include <QDebug>
/*
 * cd:表示改变目录。
/d:表示切换到指定的驱动器,即使当前驱动器不同也可以切换。
\"%1\":这部分是你传入的目录路径,%1 会被替换为实际的目录路径。双引号是为了处理可能包含空格的路径。
*/
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    // 指定目录名
    QString directoryName = "D:\\myData";  // 你可以根据需要修改目录名

    // 创建QProcess对象
    QProcess process;

    // 启动命令行
    process.start("cmd.exe");

    // 等待命令行启动
    if (!process.waitForStarted())
    {
        //qDebug() << "无法启动命令行";
        return 1;
    }

    // 发送命令切换到目录并激活conda环境
    QString command = QString("cd /d \"%1\" && conda activate dxpTest && python dxp.py").arg(directoryName);
    process.write(command.toLocal8Bit() + '\n');

    // 关闭输入通道,等待命令完成
    process.closeWriteChannel();
    process.waitForFinished();
   // QByteArray output = process.readAllStandardOutput();
    QString output = QString::fromLocal8Bit(process.readAllStandardOutput());

    qDebug() << output;
    qDebug() << "命令执行完成";

    return a.exec();
}

使用一条command命令实现即可

备注

更多代码,有待更新

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值