2013-02-24 160 views
0

我需要调用QProcess来启动xterm,之后我应该发送一些数据 给它。 为什么这些代码无法正确运行?QProcess调用写入函数失败

QProcess proc; 
proc.start("xterm"); 
proc.waitForStarted(); 
proc.write("ls\n"); 
proc.waitForFinished(); 
proc.waitForBytesWritten(); 
qDebug()<<proc.readAllStandardOutput();//output: nothing 
qDebug()<<proc.errorString();//output: "write error" 

感谢你的帮助

+1

您调用的大多数函数都有返回值。如何检查这些返回值并找出发生了什么问题? – 2013-02-24 09:58:24

+0

我已经试过了,什么都很好,但最后的声明 – tangbongbong 2013-02-25 01:25:29

+0

你是什么意思“无法正确运行”?它挂了吗?或者在调试流中不打印任何东西?我没有看到xterm应该结束它的工作的原因,所以可能你的代码挂在'proc.waitForFinished();' – 2013-02-25 17:17:56

回答

2

这不是很清楚你试图在这里做什么。你的代码没有意义:你不能发送xterm'一些数据'(看起来你希望它为你执行一些命令,这里是ls)到它的标准输入。

如果你想的LS输出,只要做到这一点:如果你想要一个解释器在后台运行,你可以发送命令它执行(如壳)

QProcess proc; 
proc.start("ls"); 
proc.waitForFinished(); 
qDebug() << proc.readAllStandardOutput(); 

你可能会这样做:

QProcess proc; 
proc.start("/bin/sh"); 
proc.waitForStarted(); 
Q_FOREACH(QString cmd, QStringList() << "ls" << "date" << "echo test") 
{ 
    proc.write((cmd + "\n").toLocal8Bit()); 
    proc.waitForReadyRead(); 
    qDebug() << proc.readAllStandardOutput().split('\n'); 
} 
proc.write("exit\n"); 
proc.waitForFinished(); 
+0

谢谢你的帮助,先生。我知道如何直接调用命令,我真正需要的是在控制台中调用qemu,在qemu初始化之后,我应该输入一些信息(使用QProcess?),如用户名和密码。这里真正的问题是为什么我不能发送数据到xterm?对不起我的英语,英语不是我的母语 – tangbongbong 2013-02-25 01:17:54

+0

我对qemu一无所知,但也许你应该看看*在[this](http:// landley)的模拟器*部分中输入/输出数据.net/aboriginal/presentation.html)doc。显然,你可以做的东西像连接模拟串行端口qemu的的标准输入/输出,然后用像上面的外壳沟通。尽管如此,我并没有在这张照片的任何地方看到xterm。这可能很好,你试图做的事情是不可能的。我建议你的问题的标题更改为更具描述性的,如“如何遥控QEMU从外部流程?”。 – axxel 2013-02-25 16:35:32

+0

再次感谢,你已经帮了我很多。反正,我仍然无法发送数据的xterm,我会学习你的文档,我尝试过'proc.start(“sh -c \”echo password | sudo -S command \“”)',它可以适用于我,但不是最好的解决方案。 – tangbongbong 2013-02-27 12:49:32