Qt5 QProcess 处理具有"special"字符的参数
Qt5 QProcess handling arguments with "special" characters
我正在维护一个使用QProcess
在Linux
上执行ncftpget
的Qt5
程序。
我尝试执行的命令是:
ncftpget -E -Z -u username -p 'a#$b1379' 1.1.1.1 /x/y/temp/ update/file
它只是将文件从服务器传输到本地目录。如果我在 bash 命令行上执行上述命令,它可以正常工作。
但是,当我的Qt5
应用程序使用QProcess
执行相同的命令时,ftp
服务器回复说用户名/密码不正确。当密码不包含任何"特殊"字符时,它可以正常工作。
正如S.M.所提到的。QProcess
不会在 shell 中执行命令。所以我假设fork()
并且进行了exec()
调用的某个版本。我如何让QProcess
在这里做正确的事情?
我假设问题与密码中的特殊字符有关。当我构建QProcess
参数列表时,我特别确保密码被'
包围,以便对特殊字符进行转义。
代码片段:
processFTP.setParent(this->parent());
processFTP.setProcessChannelMode(QProcess::MergedChannels);
// ncftpArgs is a QStringList
// snippet doesn't show complete argument list
ncftpArgs->push_back("-Z");
ncftpArgs->push_back("-u");//username
ncftpArgs->push_back(QString((*phashSettings)[FTPUSERNAME]));
ncftpArgs->push_back("-p");//pw
// password can have special characters when shell executes command.
QString password((*phashSettings)[FTPPASSWORD]);
password.prepend("'");
password.append("'");
ncftpArgs->push_back(password);
ncftpArgs->push_back(QString((*phashSettings)[FTPSERVERIP]));
ncftpArgs->push_back(QString((*phashSettings)[FTPTEMPDIR]));
//beging the ncftpget session
QString sExe = "ncftpget"; //process name
// processFTP is a QProcess object
processFTP.start(sExe, (*ncftpArgs));
bSuccess = processFTP.waitForStarted();
// .... more code to monitor process etc...
代码记录将传递给processFTP
的命令和参数,一切看起来都正确。
如何正确设置参数并启动QProcess
对象,以便将包含特殊字符的密码参数正确传递到可执行ncftpget
?
和/或我如何调试问题?
当我构建 QProcess 参数列表时,我特别确保密码被 ' 包围,以便对特殊字符进行转义。
不要在密码后附加或附加'
,删除这些行
password.prepend("'");
password.append("'");
QProcess::start
负责程序参数传递的正确方式。此外,bash解释器不是由代码中的此调用运行的。
相关文章:
- C++字符*缓冲区的大小
- HEX值到wchar_t字符(UTF-8)的转换
- 为什么 Serial.println(<char[]>);返回随机字符?
- 我的字符计数代码计算错误.为什么
- 字符串-C++后显示的随机字符
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 如何在C++中从字符串中分割字符
- 为什么msgrcv()将垃圾字符馈送到缓冲区
- 指向指向字符数组的指针数组的指针
- 如何用转义符替换字符串中的所有特殊字符
- 为什么 sscanf 无法从一个字符串中读取uint64_t和字符?
- 比较字符数组
- 将字符指针十六进制转换为字符串并保存在文本文件C++中
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- 如何使用Crypto++并为RSA返回可打印的字节/字符数组
- 如何在C++中确定文本文件中的元素是字符还是数字
- 如何将一个ostringstream十六进制字符串字符对转换为单个unit8t等价的二进制值
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- C++中无符号字符溢出
- Qt5 QProcess 处理具有"special"字符的参数