2010-03-12 2 views
0

Je voudrais exécuter un script R simplement commeComment récupérer la sortie lors de l'appel R à l'aide QProcess ou d'un système

R --file=x.R 

Il fonctionne bien sur la ligne de commande. Cependant, lorsque je tente l'appel système en C++ par

QProcess::execute("R --file=x.R"); 

ou

system("R --file=x.R"); 

le programme exécute R et les départs volontaires, mais je ne vois pas la sortie du programme est censé générer. Si un programme n'utilise pas de sortie standard (comme R), comment puis-je récupérer la sortie après un appel système en tant que fichier de sortie ou dans la propre console du programme?

Merci pour votre temps.

Répondre

1

QProcess permet de capturer la sortie de la commande que vous exécutez; mais pas à travers l'appel de fonction statique que vous avez utilisé. Au lieu de cela, essayer quelque chose comme ceci:

QProcess process; 
process.start("R --file=x.R"); 
process.waitForFinished(); 
QByteArray output = process.readAllStandardOutput(); 
QByteArray error = process.readAllStandardError(); 

Bien sûr, de faire les choses correctement, vous pouvez commencer le processus, puis faire le reste du code dans une fente reliée au signal fini de l'objet de processus. Vous pouvez également lire la sortie standard ou l'erreur de manière incrémentielle, si vous le désirez. Vous pouvez également définir des objets pour recevoir la sortie ou l'erreur en entrée de ces objets.

+0

Merci. Mais la "sortie" ne contient que le message de bienvenue de R mais x.R est ignoré ou exécuté mais ne produit aucun résultat. "R --file = x.R" fonctionne toujours sur la ligne de commande. – SYK

+0

@SYK: Ma prochaine supposition est que c'est peut-être quelque chose que R est en train de faire pour détecter le type de sortie qu'il a, et seulement s'il a un terminal à imprimer. Cependant, cela ne vous aide probablement pas beaucoup. –

Questions connexes