texto - en c++ como se mandan letreros a pantalla
Comando trabajando en la terminal, pero no a través de QProcess (3)
El objeto QProcess
no le proporciona automáticamente una sintaxis de shell completa: no puede usar tuberías. Use una cáscara para esto:
p1.start("/bin/sh -c /"ifconfig | grep inet/"");
ifconfig | grep ''inet''
está funcionando cuando se ejecuta a través de terminal. Pero no a través de QProcess
Mi código de muestra es
QProcess p1;
p1.start("ifconfig | grep ''inet''");
p1.waitForFinished();
QString output(p1.readAllStandardOutput());
textEdit->setText(output);
No se muestra nada en el mensaje de texto.
pero cuando uso solo ifconfig
en el inicio de qprocess, la salida se muestra en textedit. ¿Me perdí algún truco para construir el comando ifconfig | grep ''inet''
ifconfig | grep ''inet''
, como usar /'
para ''
y /|
para |
? para caracteres especiales? pero también lo intenté :(
No se puede utilizar el símbolo de la tubería en QProcess parece.
Sin embargo, existe el método setStandardOutputProcess que canalizará la salida al siguiente proceso.
Un ejemplo se proporciona en la API.
QProcess ejecuta un solo proceso. Lo que está intentando hacer es ejecutar un comando de shell , no un proceso. La canalización de comandos es una característica de su shell.
Hay tres soluciones posibles:
Coloque el comando que desea que se ejecute como un argumento para sh
después de -c
("comando"):
QProcess sh;
sh.start("sh", QStringList() << "-c" << "ifconfig | grep inet");
sh.waitForFinished();
QByteArray output = sh.readAll();
sh.close();
O podría escribir los comandos como la entrada estándar a sh
:
QProcess sh;
sh.start("sh");
sh.write("ifconfig | grep inet");
sh.closeWriteChannel();
sh.waitForFinished();
QByteArray output = sh.readAll();
sh.close();
Otro enfoque que evita sh
, es lanzar dos QProcesses y hacer la tubería en su código:
QProcess ifconfig;
QProcess grep;
ifconfig.setStandardOutputProcess(&grep); // "simulates" ifconfig | grep
ifconfig.start("ifconfig");
grep.start("grep", QStringList() << "inet"); // pass arguments using QStringList
grep.waitForFinished(); // grep finishes after ifconfig does
QByteArray output = grep.readAll(); // now the output is found in the 2nd process
ifconfig.close();
grep.close();