titulo texto poner para pantalla mandan letreros dev como comando centrar c++ linux qt terminal pipe

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();