【发布时间】:2014-12-09 08:36:08
【问题描述】:
我编写了一个 QT GUI 程序,按下按钮将执行 .sh 脚本。脚本的内容是-
echo -e 'attach database 'testdatabase.db' as 'aj';\n.separator ","\n.import ora_exported.csv qt_ora_exported' | sqlite3 testdatabase.db
基本上,该脚本会将 .csv 文件导入 sqlite 数据库。当脚本文件 (script.sh) 从 linux 终端 ($./script.sh) 手动运行时,它成功地将 .csv 文件导入到数据库表中。
但是,当我从我的 QT 程序中调用脚本时
void MainWindow::on_importButton_clicked()
{
QProcess process;
process.startDetached("/bin/sh",QStringList()<<"/home/aj/script.sh");
}
它编译成功,但在运行时按下按钮时会在控制台中显示错误消息。
错误:第 1 行附近:“-”附近:语法错误 错误:无法打开“ora_exported.csv”
这可能是什么原因???
已编辑
我现在已将 .sh 脚本更改为--
echo -e 'attach database 'testdatabase.db' as 'aj';\n.separator ","\n.import /home/aj/ora_exported.csv qt_ora_exported' | sqlite3 testdatabase.db
因此提供了我的 ora_exported.csv 的路径。结果运行时错误[错误:无法打开“ora_exported.csv”]已经消失,但另一个消息[错误:靠近第1行:靠近“-”:语法错误]仍然出现。
与之前的情况相同,使用 ./script.sh 成功将数据导入 sqlite3 db 表文件,但 QProcess 无法。
【问题讨论】:
-
脚本从该文件
ora_exported.csv不存在的目录运行和/或path变量不包含该文件所在的目录。只需添加third argument:workingDirectory,并具有适当的值。 -
我已经注意到您的建议,并在脚本文件中包含了 .csv 的目录路径。情况还是一样。您能否指导我了解workingDirectory 在我的上下文中将是什么。我无法从 QT 文档链接中获得它。
-
@MarekR 正在讨论调用
QProcess的目录。只需将该目录添加到startDetached()调用或在process实例上调用setWorkingDirectory(),然后再调用startDetacjed()。