如何使 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?
我试图在 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 thesubprocess
Module section in thesubprocess
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?