Home
Categories
WIKI
Topic
User
LANGUAGE:
中文
English
请问深度系统是如何传递命令行参数的?
社区开发
1624
views ·
5
replies ·
To
floor
Go
linkaizheng
deepin
2018-09-23 03:00
Author
本帖最后由 linkaizheng 于 2018-9-24 06:25 编辑
我习惯了使用自己编的编辑器,但使用中发现无法用右键点击“打开方式”->“选择默认程序”来打开文档。经测试发现系统并没有传递命令行参数到程序中。测试代码如下:
#include
int
main (int argc, char **argv)
{
GtkWidget *window;
int i;
gtk_init (&argc, &argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
for(j = 0; j < argc; j ++)
{
GtkWidget *dialog;
dialog = gtk_message_dialog_new (GTK_WINDOW(window),
GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_WARNING,
GTK_BUTTONS_CLOSE,
"argc=%d\nargv[%d]=\"%s\"",
argc,
j,
argv[j]);
gtk_dialog_run(GTK_DIALOG(dialog));
gtk_widget_destroy (dialog);
}
gtk_widget_show(window);
g_signal_connect_swapped(G_OBJECT(window), "destroy",
G_CALLBACK(gtk_main_quit), NULL);
gtk_main();
return 0;
}
得到的结果如下图:
可以看到系统传递给程序的命令行参数只有一条,就是程序本身。其它的系统还会有第二条,应该是要打开的文件的路径。不知道深度的系统为什么没有?要说没有吧,深度自带的编辑器gedit就能用同样的方式打开文件,真的是好奇怪呀?
在命令行输入 argtest/argtest ./test.txt 就可以得到命令行参数,结果如下图:
尽管我可以在程序打开后,再去打开文档。但总是有些别扭。请问我该如何做,才能让系统把命令行参数传递过来?
感谢 linusboyle 和 listtenerRi 两位坛友的回帖提示,问题终于解决了!
参考
giftdawn
的文档,找到了问题的解决方法,原文链接:
https://blog.csdn.net/giftdawn/article/details/7917982
解决方法如下:
在桌面上建立 argtest.desktop 文件,添加如下内容:
[Desktop Entry]
Encoding=UTF-8
Exec=/home/kaizheng/Documents/test/arg-test/argtest/argtest %F
Icon=application-x-desktop
MimeType=text/plain
Name=argtest
Terminal=false
Type=Application
右键点击要打开的文档,点击“打开方式”、“选择默认程序”,然后点“添加其他程序”,选择刚建立的 argtest.desktop 文件,即可打开文档了,结果如下图:
重点是“Exec=/home/kaizheng/Documents/test/arg-test/argtest/argtest %F” 这句中的
“%F” ,
它就是传递命令行参数的关键符号,系统在自动创建的desktop 文件中没有它。
Reply
Like 0
Favorite
View the author
All Replies
wtz
deepin
2018-09-23 04:41
#1
直接在命令行里调用,可以获取到参数(要打开的文件名)吗?
Reply
Like 0
View the author
Comments
linkaizheng
2018-09-24 14:03
谢谢您的参与
linkaizheng
deepin
2018-09-23 04:59
#2
https://bbs.deepin.org/post/169180
直接在命令行里调用,可以获取到参数(要打开的文件名)吗?
在命令行输入是可以的,但我需要的是双击文本文件就能打开文档
Reply
Like 0
View the author
linusboyle
deepin
2018-09-23 06:24
#3
desktop 文件的问题吧
Reply
Like 0
View the author
Comments
linkaizheng
2018-09-24 14:00
尽管回复的稍显简单,但指明了问题的解决方向,谢谢了
listenerri
deepin
2018-09-23 06:26
#4
检测一下desktop文件
Reply
Like 0
View the author
Comments
linkaizheng
2018-09-24 14:01
尽管回复的稍显简单,但指明了问题的解决方向,谢谢了
wangzhentao
deepin
2019-10-14 19:48
#5
你好,为什么我的.desktop的application类型不能添加到打开方式呢?
Reply
Like 0
View the author
Please
sign
in first
Featured Collection
Change
[Tutorial] deepin25 WSL Offline Installation Guide
UOS AI 2.8 Released! Three New Intelligent Agents & Major Evolution
Solid Q&A | deepin 25 Common Questions – The Immutable System Edition
New Thread
Popular Events
More
我习惯了使用自己编的编辑器,但使用中发现无法用右键点击“打开方式”->“选择默认程序”来打开文档。经测试发现系统并没有传递命令行参数到程序中。测试代码如下:
#include
int
main (int argc, char **argv)
{
GtkWidget *window;
int i;
gtk_init (&argc, &argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
for(j = 0; j < argc; j ++)
{
GtkWidget *dialog;
dialog = gtk_message_dialog_new (GTK_WINDOW(window),
GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_WARNING,
GTK_BUTTONS_CLOSE,
"argc=%d\nargv[%d]=\"%s\"",
argc,
j,
argv[j]);
gtk_dialog_run(GTK_DIALOG(dialog));
gtk_widget_destroy (dialog);
}
gtk_widget_show(window);
g_signal_connect_swapped(G_OBJECT(window), "destroy",
G_CALLBACK(gtk_main_quit), NULL);
gtk_main();
return 0;
}
得到的结果如下图:
可以看到系统传递给程序的命令行参数只有一条,就是程序本身。其它的系统还会有第二条,应该是要打开的文件的路径。不知道深度的系统为什么没有?要说没有吧,深度自带的编辑器gedit就能用同样的方式打开文件,真的是好奇怪呀?
在命令行输入 argtest/argtest ./test.txt 就可以得到命令行参数,结果如下图:
尽管我可以在程序打开后,再去打开文档。但总是有些别扭。请问我该如何做,才能让系统把命令行参数传递过来?
感谢 linusboyle 和 listtenerRi 两位坛友的回帖提示,问题终于解决了!
参考 giftdawn的文档,找到了问题的解决方法,原文链接:
https://blog.csdn.net/giftdawn/article/details/7917982
解决方法如下:
在桌面上建立 argtest.desktop 文件,添加如下内容:
[Desktop Entry]
Encoding=UTF-8
Exec=/home/kaizheng/Documents/test/arg-test/argtest/argtest %F
Icon=application-x-desktop
MimeType=text/plain
Name=argtest
Terminal=false
Type=Application
右键点击要打开的文档,点击“打开方式”、“选择默认程序”,然后点“添加其他程序”,选择刚建立的 argtest.desktop 文件,即可打开文档了,结果如下图:
重点是“Exec=/home/kaizheng/Documents/test/arg-test/argtest/argtest %F” 这句中的 “%F” ,它就是传递命令行参数的关键符号,系统在自动创建的desktop 文件中没有它。