我在python脚本(#!/usr/bin/python
)的开头添加了 hashbang 行,并通过chmod +x file.py
命令给了它可执行权限,但点击模块后运行它,终端弹出但是空白。
它是否与python解释器有关,可能不在指定的路径中?
答案 0 :(得分:4)
这似乎不是有效的 shebang 。
尝试#!/usr/bin/python
(注意哈希标记后的惊叹。)
根据OP的评论进行编辑:
因此,根据您对单击文件管理器中的图标以及 LXDE 平台的评论,看起来在该用例中它最终会调用g_app_info_create_from_commandline
函数GAppInfo库,它似乎是用于存储“应用程序信息和启动上下文”的整个层。
在此之前,它会在G_APP_INFO_CREATE_NEEDS_TERMINAL
标记中按位“或”进入flags
字段,并将其传递到fm-file-launcher.c code中的fm_app_info_create_from_commandline
。
所以,看起来双击文件在最终在终端中运行之前会做很多额外的事情,看起来那些额外的东西(附加的上下文,通过其他库和层抽象出来等等) 。)是造成这个问题的原因。
如果该功能确实应该“正常”在终端中真正启动,那么我会将其视为 fm-file-launcher.c 代码中的错误,或者可能是< em> GAppInfo 代码本身。
我不确定开发人员是否一定会同意 - 这将取决于底层究竟发生了什么,以及他们打算将这个功能完全打算。如果你真的希望能够做到这一点(我不确定我是否真的得到了直接在终端窗口中直接使用./file.py
方法的好处),我建议你提交一个针对 fm的错误-file-launcher.c 代码。这是 libfm 项目的一部分,看起来他们不会通过他们的 github 页面跟踪问题,而是根据他们的{{3}跟踪他们的SourceForge页面}。
简而言之,双击文件管理器中的图标并选择在终端中启动它而不是在终端中实际启动它是非常非常不同的事情,即使前者本质上的功能类似于后者。
作为旁注,我尝试在 Nautilus (我使用 Ubuntu )中执行此操作,并且针对该用例的行为是自动假设它是文本文件而不是可执行文件并将其加载到我的默认文本编辑器中。
答案 1 :(得分:1)
可能与脚本实际上没有设置打印任何东西有关。请记住,如果直接在解释器中运行所有语句都会得到打印输出,例如,
>>> a = 2
>>> a ** a
4
会在intrepeter中显示,但如果以脚本形式运行,则需要print
语句(P3k中的函数)才能显示输出。
答案 2 :(得分:0)
您需要有一些东西可以将项目输出到终端,例如file.py:
#!/usr/bin/python
print "test"