如何从Ubuntu Dash运行Python脚本?

时间:2019-03-16 05:57:16

标签: python ubuntu

我已经编写了hello.py(一个基本的“ hello world”程序),并希望能够通过按Win键打开Dash,然后在脚本中输入脚本名称(或类似的东西。

但是,当我在Dash中键入hello.py时,它将在编辑器中打开文件而不是执行文件。我添加了一个shebang行#!/usr/bin/env python3并运行chmod u+x hello.py,它仍然在编辑器中打开文件。

我尝试创建一个将运行Python脚本的 hello.sh 外壳脚本,但是当我在Dash中键入其名称时,该外壳脚本也会在编辑器中打开。

是否可以通过在Dash中键入其名称来运行Python脚本?还是有另一种简单的方法来运行任意Python脚本?本质上,我想要的是类似Windows的运行对话框,当您按下Win-R时会出现该对话框,该对话框可以在系统PATH上运行任何程序。

4 个答案:

答案 0 :(得分:6)

(在18.04测试) 在~/.local/share/applications(仅供用户使用)或/usr/share/applications(供所有用户使用)中创建此文件。
文件名必须以.desktop结尾。

[Desktop Entry]
Name=hello.py
Exec=/path/to/hello.py
Type=Application
Categories=GTK;GNOME;Utility;

请注意,该脚本在后台运行,并且除非将日志记录配置到脚本中的文件,否则错误将被吞没。

如果您希望它在控制台中运行,则可以执行此操作(不过,脚本退出时控制台将关闭):

[Desktop Entry]
Name=hello.py
Exec=gnome-terminal -- /path/to/hello.py
Type=Application
Categories=GTK;GNOME;Utility;

如果您需要图标,限制图标运行的桌面环境等,则可以使用更多功能-此处的文档:https://developer.gnome.org/integration-guide/stable/desktop-files.html.en

假设

  • hello.py可由当前用户执行
  • hello.py具有有效的shebang
  • 该路径必须是绝对路径(即非相对路径,也不要使用〜或变量之类的shell扩展)

答案 1 :(得分:3)

首先,我要指出我不是 Lnx UI 专家(这不是我的主要环境,并且我大多没有 X < / em>)。但是我想从我的评论中可以明显看出。所以我不得不 Google 。一些资源:

  1. [FreeDesktop.Specifications]: Desktop Entry Specification
  2. [Lifewire]: The Complete Guide to the Ubuntu Unity Dash
  3. [AskUbuntu]: Creating a .desktop file for a new application
  4. [GNOME.Developer]: Desktop files: putting your application in the desktop menus(也由[SO]: How can I run a Python script from Ubuntu Dash? (@Bengerman's answer)指出)
  5. 很多人

该解决方案类似于@Bengerman的解决方案(这很正常,因为 .desktop 文件是自定义 Dash 的最常用方法)。
人们可以看着它,就像是:

  • 一个巧妙的把戏
  • la脚的解决方法( gainarie

我也在2之间摇摆,但是考虑到 Dash 可能不是这样设计的,我有点倾向于后者。

1。设置(系统信息)

我有一个 VirtualBox VM ,具有以下规格:

cfati@cfati-ubtu16x64-0:~/bin$ ~/sopr.sh 
*** Set shorter prompt to better fit when pasted in StackOverflow (or other) pages ***

[064bit prompt]> uname -a
Linux cfati-ubtu16x64-0 4.15.0-58-generic #64~16.04.1-Ubuntu SMP Wed Aug 7 14:10:35 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
[064bit prompt]> 
[064bit prompt]> cat /etc/lsb-release | grep LTS
DISTRIB_DESCRIPTION="Ubuntu 16.04.6 LTS"
[064bit prompt]> 
[064bit prompt]> cat /etc/X11/default-display-manager
/usr/sbin/lightdm
[064bit prompt]> 
[064bit prompt]> echo ${PATH}
/home/cfati/bin:/home/cfati/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/cfati/Install/Google/Android_SDK/tools:/home/cfati/Install/Google/Android_SDK/platform-tools:/home/cfati/Install/Google/Android_SDK/ndk-bundle:/home/cfati/Install/Google/Android_SDK/tools:/home/cfati/Install/Google/Android_SDK/platform-tools:/home/cfati/Install/Google/Android_SDK/ndk-bundle
[064bit prompt]> 
[064bit prompt]> ls -l ~/.local/share/applications/py.desktop
-rw-r--r-- 1 cfati cfati 400 aug 30 20:22 /home/cfati/.local/share/applications/py.desktop
[064bit prompt]> 
[064bit prompt]> ls -l
total 4
-rwxrwxr-x 1 cfati cfati 142 aug 30 21:49 hwx.py

因此,它是具有 Unity Ubtu 16 x64

2。创建 .desktop 应用程序

py.desktop

[Desktop Entry]
Name=Generic Python file
Comment=Run a Python file when typing its name in Dash ...
Exec=bash -c "bash --rcfile <(echo \"/usr/bin/env python3 %F\")"
#Icon will differ on other machines.
Icon=/usr/share/pixmaps/python3.5.xpm
Terminal=true
Type=Application
#I am not fully aware of the following entries implications
Categories=ConsoleOnly;Utility;System;Development;
Keywords=console;python;

将以上文件复制到 $ {HOME} /。local / share / applications 中(仅对当前用户启用)。

注释

  • 打开 Dash 时,它应显示在 Applications 下。但是,可能需要一些时间才能出现在此处。当我编辑它时,我注意到有时它无法显示(许多是因为它的内容无效(我在学习过程中),但是有一些我无法解释)
  • Exec 键- bash
    • Inner:用于启动 Python ,并且在 Python 执行时不要退出
      • 启动 Python shebang 有2个含义:
        • (对于包含它们的文件)将被忽略
        • 没有它们的文件也可以正常工作
    • 外部:用于包装内部的内容,因为解析器不喜欢重定向运算符

2.1。将 .py 文件与新应用程序关联

在我的 UI 上,我必须:

  • 右键单击 .py 文件
  • 转到属性->打开方式
  • 从应用程序列表中
  • 选择通用Python文件(如果未显示,则可能需要添加
  • 选中设置为默认按钮

3。测试

测试文件位于〜/ bin (位于 $ {PATH} 中)中。

hwx.py

#!/usr/bin/env python3


import sys
import os

print("Hello World from: [{0:s}]".format(os.path.abspath(__file__)))
input("Press <ENTER>: ")
  • 打开 Dash 并输入文件名

    Img0

    注意:不知道这是我的 VM 上的故障还是一般情况,但是有时我还必须在文件名后键入 SPACE ( (在图片中也是可见的),以便显示选项

  • 从下面显示的选项中选择(单击)文件,然后将打开一个控制台:

    Img1

  • 不用说,在 Python 进程退出后,控制台仍将保留

与该问题无关,但我认为值得一提[SO]: How do I set “default App” for a file extension to an “.exe” on Windows 10 after April 2018 update (@CristiFati's answer)

答案 2 :(得分:0)

关于最后一段:

  

是否可以通过在Dash中键入其名称来运行Python脚本?还是有另一种简单的方法来运行任意Python脚本?本质上,我想要的是类似Windows的运行对话框,当您按下Win-R时会出现该对话框,该对话框可以在系统PATH上运行任何程序。

您几乎可以回答自己。在Linux中,您还具有PATH环境变量。您可以在控制台中输入以下内容进行检查:

$ echo $PATH

我在/home/xbello/.bashrc文件中将路径编辑为如下内容:

export PATH=$HOME/bin:$PATH

现在,我将程序和脚本放在/ home / xbello / bin中,将其chmod更改为+ x,并且它们始终可以从终端或Alt + F2上获得。如果添加shebang #!/bin/env python,则不需要扩展名。问题是从Alt + F2执行的print("Hello world")的输出将丢失。您需要这样的代码:

#!/bin/env python3
import os

os.system("notify-send 'Hello world'")

答案 3 :(得分:0)

使用gnome-panel GUI可能是最简单的方法:

  1. 安装gnome-panel

    $ sudo apt install gnome-panel
    
  2. 启动项目编辑脚本。您需要将.desktop文件放在~/.local/share/applications/usr/share/applications中。请记住,/usr/share将可供所有系统用户访问。

    $ gnome-desktop-item-edit --create-new ~/.local/share/applications/Tester.desktop
    

enter image description here

  1. 填写启动器详细信息。

enter image description here

  1. 然后,您将可以从启动器访问图标,并将其移动到桌面或任何需要的位置。

enter image description here

  1. 如果您需要编辑应用程序,则有2个选项:

    a。再次运行项目编辑脚本以重新打开GUI。

    ```shell
    $ gnome-desktop-item-edit ~/.local/share/applications/Tester.desktop
    ```
    

    b。直接在vim之类的文件中打开桌面文件。

enter image description here