我想從Gnome/GTK產生一個新的應用程序到CLI應用程序,並將其輸出讀回到我的Gnome/GTK應用程序中。如何從Gnome/GTK產生一個新的應用程序到CLI應用程序並將其輸出讀回到Gnome/GTK應用程序?
的代碼按預期工作對於大多數shell命令,但與尾-f在/ var/log/messages中和頂部沒有。有沒有什麼辦法解析這兩個命令的輸出?
正在運行Ubuntu 12.04.2 LTS和libgtk2.0。
#include <gtk/gtk.h>
static GtkWidget *window; // pointer to window
static GtkWidget *view; // pointer to textview
static GtkTextBuffer *buffer; // pointer to buffer
static GtkTextIter iter; // gtktextview iterator
static GtkWidget *scrolled_window; // pointer to scrolled window
FILE *fp; // pointer to stdin/out file pipe
char line[256]; // line read buffer size
static gboolean on_delete_event (GtkWidget *widget, GdkEvent *event, gpointer data){
gtk_main_quit();
return FALSE;
}
void create_gui(){
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
g_signal_connect (G_OBJECT (window), "delete_event",
G_CALLBACK(on_delete_event), NULL);
gtk_window_set_title (GTK_WINDOW (window), "GUI Front-End for CLI");
GtkWidget *box = gtk_vbox_new(FALSE, 10); // Create a box and
gtk_container_add (GTK_CONTAINER(window), box); // set it as window's main child.
scrolled_window=gtk_scrolled_window_new(NULL, NULL); // Now create scrolled window...
gtk_widget_set_usize(scrolled_window, 650, 450); // Set scrolled window size..
gtk_container_add(GTK_CONTAINER(box), scrolled_window); // Add scrolled window to vbox..
view = gtk_text_view_new(); // Create textview..
gtk_container_add(GTK_CONTAINER(scrolled_window), view); // Add textview to scrolled window..
buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(view)); // Assign textview buffer
}
void populate(){
fp = popen("cat /var/log/messages", "r"); // run shell command using pipe
while (fgets(line, sizeof line, fp)){ //
gtk_text_buffer_get_end_iter (buffer, &iter);
gtk_text_buffer_insert (buffer, &iter, line, -1);
}
pclose(fp); // CLOSE Pipe
}
int main (int argc, char *argv[]){
gtk_init (&argc, &argv);
create_gui();
populate();
gtk_widget_show_all (window);
gtk_main();
return 0;
}
// TODO
// fp = popen("ls -al", "r");
// fp = popen("cat /proc/cpuinfo", "r");
// fp = popen("cat /var/log/messages", "r");
// fp = popen("lspci -v", "r");
// fp = popen("w", "r");
// fp = popen("last", "r");
// fp = popen("pstree", "r");
// fp = popen("tail -f /var/log/messages &", "r"); THIS DOES NOT WORK !
// fp = popen("top", "r"); NEITHER DOES THIS..
enter code here
測試'wget'和'git clone'命令。大多數情況下,這兩個命令將打印文本到shell終端(從gnome-terminal運行您的gtk應用程序,您將看到命令輸出),而不是GtkTextView。我以前試過管道,但是,是的,只有一部分命令工具運行良好。 – LiuLang
嗨劉謝謝你的幫助。讓我澄清我想做什麼。 例如: GTK應用程序調用「ls -a」,然後ls的輸出顯示在GTK_TEXTVIEW小部件中。 這是我能夠做的,但不是TOP或TAIL命令,這是我需要指導和幫助的地方。 非常感謝您的建議,我也會研究它們。 –