Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct
Problem sending command to terminal with QProcess
I am currently using Fedora 23 and QT 5.6. I am building a command for Hping3 and trying to send that command to the terminal and receive the results upon a button push. I can get the terminal to open but I can not get it to receive any commands. I am very new to QT so my knowledge is minimal. I learned programming with Visual Basic so I understand logic but this syntax is killing me.
//Sending the command to terminal QProcess proc; proc.start("/usr/bin/gnome-terminal"); proc.waitForStarted(); proc.write("su"); proc.write("ite"); //proc.write(command); proc.waitForFinished(); QByteArray output = proc.readAll(); proc.close(); ui->dgvResults->setText(output);
I am trying to display in a QTextBrowser and Commented out that one write command because I am getting an error
/home/itestudent/SeniorProject/frmmain.cpp:112: error: no matching function for call to 'QProcess::write(QString&)'
Command is declared at the top of the button push event
QString command = "hping3 -S ";
Any help would be great
hi and welcome
the write seems to want a const char * so try with
( you give it QString& and it dont want a QString)
Hi and welcome to devnet,
Since you only want the result, are you sure you need the gnome-terminal ? Or is to enter su's password ?
Use QByteArray for
commandin place of QString.
@SGaist I was trying to get into the su because sudo was not working. Now i figured out how to fix sudo so I am trying to send echo ite | sudo -S hping3 -S -c 5 <portNumber> <IPAdress> to the bash. My code waits like it is processing the command but I can not get it to update the text box(dgvResults). If i change the text box(dgvResults) to a simple string it will output that though. The code that I have so far is
proc.waitForStarted(); proc.execute(command); proc.waitForFinished(); QByteArray output = proc.readAll(); proc.close(); ui->dgvResults->setText(output);
I just want to thank you for the help. I just found another thread that had exactly what I needed. I swear I tried this before and it didn't work but somehow it does now
proc.start("/bin/bash", QStringList() << "-c" << command);
proc.waitForFinished(); QByteArray output = proc.readAll(); proc.close(); ui->dgvResults->setText(output);
Again thank you for the responses they were very helpful
Glad you found out and thanks for sharing !
Since you have it working now, please mark the thread as solved using the "Topic Tool" button so that other forum users may know a solution has been found :)