如何使 python 程序在 safari 中以文本形式自行打开?

How to make a python program open itself as text in safari?

我试图在 Python 中制作一个程序,该程序将使用 os.system 在 Safari 中打开文件。在这种情况下,我试图让它打开自己的文本副本。文件名为 foo.py.

import os, socket
os.system("python -m SimpleHTTPServer 4000")
IP = socket.gethostbyname(socket.gethostname())
osCommand = "open -a safari http://"+IP+":4000/foo.py"
os.system(osCommand)

system 运行一个程序,然后等待它完成,然后返回。

因此在服务器完成服务之前它不会到达您的代码的下一行。这永远不会发生。 (好吧,你可以按 ^C,然后它会停止服务——但是当你到达下一行打开 safari 时,它将不再有服务器可连接。)

这是 system 的文档基本上告诉您不要使用它的众多原因之一:

The subprocess module provides more powerful facilities for spawning new processes and retrieving their results; using that module is preferable to using this function. See the Replacing Older Functions with the subprocess Module section in the subprocess documentation for some helpful recipes.

例如:

import subprocess, socket
server = subprocess.Popen(['python', '-m', 'SimpleHTTPServer', '4000'])
IP = socket.gethostbyname(socket.gethostname())
safari = subprocess.Popen(['open', '-a', 'safari', 'http://'+IP+':4000/foo.py'])
server.wait()
safari.wait()

这将在后台启动两个程序,然后等待两个程序完成,而不是启动一个程序,等待它完成,启动另一个程序,然后等待它完成。


综上所述,这是一种做你想做的事的愚蠢方式。在 Safari 中打开文件 URL(如 'file:///{}'.format(os.path.abspath(sys.argv[0])))有什么问题?或者在默认的网络浏览器中(对于你来说可能是 Safari,但也可以在其他平台上工作,并且对于使用 Chrome 或 Firefox 的 Mac 用户,等等)通过使用 webbrowser.open 那个 URL?