【问题标题】:Lauch default editor (like 'webbrowser' module)启动默认编辑器(如“webbrowser”模块)
【发布时间】:2009-09-18 06:18:43
【问题描述】:

有没有一种简单的方法可以从 Python 命令行工具(例如 webbrowser 模块)启动系统默认编辑器?

【问题讨论】:

  • 哪种文件类型?对于 .txt 和 .py,使用默认应用程序打开就足够了。对于其他文件类型,您可能没有编辑器。
  • 在我的情况下,我需要编辑 .xml 和普通文本(如 svn 中的提交消息)。

标签: python command-line editor


【解决方案1】:

在windows下,你可以简单地“执行”文件,然后会采取默认动作:

os.system('c:/tmp/sample.txt')

对于本例,将生成一个默认编辑器。在 UNIX 下有一个名为 EDITOR 的环境变量,所以你需要使用类似的东西:

os.system('%s %s' % (os.getenv('EDITOR'), filename))

【讨论】:

  • Mac 用户没有得到任何爱?
  • 如果 EDITOR 未设置怎么办?
  • @exhuma 如果 $EDITOR 没有设置那么你没有 user-set 默认使用。在 OS X 上,您可以subprocess.call(["open, "<file-path>"]) 使用默认应用程序,就像您使用 GUI 一样。在 linux 上,您可以像 @u0b34a0f6ae 建议的那样 subprocess.call(["xdg-open", "<file-path>"])。此处使用suprocess 代替system,因为subprocess 旨在替换system。它更安全,并提供像 Popen 这样的方法,提供更大的灵活性。
  • 如果不是 .txt 文件怎么办?如果您想使用默认编辑器编辑 .html 文件怎么办?
【解决方案2】:

现代 Linux 打开文件的方法是使用xdg-open;但是它不保证文本编辑器会打开文件。如果您的程序是面向命令行的(以及您的用户),则使用 $EDITOR 是合适的。

【讨论】:

    【解决方案3】:

    如果您需要打开文件进行编辑,您可以关注this question

    【讨论】:

    • (这个警告也适用于我的回答)如果查看器和编辑器是分开的,这会在 9/10 情况下打开查看器。在 HTML 文件上调用它,Web 浏览器将打开它以供 查看
    • 你是对的,当然 :) 也许 OP 会澄清她需要处理的文件类型..
    【解决方案4】:

    您实际上可以使用webbrowser 模块来执行此操作。到目前为止,针对此问题和链接问题给出的所有答案都与 webbrowser 模块在幕后所做的相同。

    唯一的区别是他们是否设置了$EDITOR,这很少见。所以也许更好的流程是:

    editor = os.getenv('EDITOR')
    if editor:
        os.system(editor + ' ' + filename)
    else:
        webbrowser.open(filename)
    

    好的,既然我已经告诉过你,我应该让你知道 webbrowser 模块确实声明它不支持这种情况。

    请注意,在某些平台上,尝试使用此函数打开文件名可能会起作用并启动操作系统的相关程序。但是,这既不支持也不可移植。

    因此,如果它不起作用,请不要提交错误报告。但对于大多数用途,它应该可以工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-08
      • 2018-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多