赞
踩
利用内建的 subprocess 模块中的 Popen()函数,Python 程序可以启动计算机中的
其他程序(Popen()函数名中的P 表示 process,进程)。如果你打开了一个应用程序的多个实例,每个实例都是同一个程序的不同进程。例如,如果你同时打开了 Web浏览器的多个窗口,每个窗口都是
Web 浏览器程序的不同进程。参见图 15-1,这是同时打开多个计算器进程的例子。每个进程可以有多个线程。不像线程,进程无法直接读写另一个进程的变量。如果你认为多线程程序是多个手指在追踪源代码,那么同一个程序打开多个进程就像有一个朋友拿着程序源代码的独立副本。你们都独立地执行相同的
程序。
如果想在 Python 脚本中启动一个外部程序,就将该程序的文件名传递给 subprocess.Popen()(在 Windows 中,右键点击该应用程序的开始菜单项,然后选择
“属性”,查看应用程序的文件名。在 OS X 上,按住 Ctrl 键单击该应用程序并选择
每个进程可以有多个线程。不像线程,进程无法直接读写另一个进程的变量。如果你认为多线程程序是多个手指在追踪源代码,那么同一个程序打开多个进程就像有一个朋友拿着程序源代码的独立副本。你们都独立地执行相同的
程序。
如果想在 Python 脚本中启动一个外部程序,就将该程序的文件名传递给 subprocess.Popen()(在 Windows 中,右键点击该应用程序的开始菜单项,然后选择
“属性”,查看应用程序的文件名。在 OS X 上,按住 Ctrl 键单击该应用程序并选择
每个进程可以有多个线程。不像线程,进程无法直接读写另一个进程的变量。如果你认为多线程程序是多个手指在追踪源代码,那么同一个程序打开多个进程就像有一个朋友拿着程序源代码的独立副本。你们都独立地执行相同的
程序。
如果想在 Python 脚本中启动一个外部程序,就将该程序的文件名传递给 subprocess.Popen()(在 Windows 中,右键点击该应用程序的开始菜单项,然后选择
“属性”,查看应用程序的文件名。在 OS X 上,按住 Ctrl 键单击该应用程序并选择
“显示包内容”,找到可执行文件的路径)。Popen()函数随后将立即返回。请记住,启动的程序和你的Python 程序不在同一线程中运行。
在 Windows 计算机上,在交互式环境中输入以下代码:
>>> import subprocess
>>> subprocess.Popen('C:\\Windows\\System32\\calc.exe')
<subprocess.Popen object at 0x0000000003055A58>
在 Ubuntu Linux 上,可以输入以下代码:
>>> import subprocess
>>> subprocess.Popen('/usr/bin/gnome-calculator')
<subprocess.Popen object at 0x7f2bcf93b20>
在 OS X 上,过程稍有不同。参见 15.8.5 节“用默认应用程序打开文件”。返回值是一个Popen 对象,它有两个有用的方法:poll()和 wait()。
可以认为 poll()方法是问你的朋友,她是否执行完毕你给她的代码。如果这个进程在 poll()调用时仍在运行,poll()方法就返回
None。如果该程序已经终止,它会返回该进程的整数退出代码。退出代码用于说明进程是无错终止(退出代码为 0),还是一个错误导致进程终止(退出代码非零,通常为 1,但可能根据程序而不同)。
wait()方法就像是等着你的朋友执行完她的代码,然后你继续执行你的代码。
wait()方法将阻塞,直到启动的进程终止。如果你希望你的程序暂停,直到用户完成与其他程序,这非常有用。wait()的返回值是进程的整数退出代码。
在 Windows 上,在交互环境中输入以下代码。请注意, wait()的调用将阻塞,直到退出启动的计算器程序。
➊ >>> calcProc = subprocess.Popen('c:\\Windows\\System32\\calc.exe')
➋ >>> calcProc.poll() == None
True
➌ >>> calcProc.wait()
0
>>> calcProc.poll()
0
这里,我们打开了计算器程序➊。在它仍在运行时,我们检查 poll()是否返回
None➋。它应该返回None,因为该进程仍在运行。然后,我们关闭计算器程序,并对已终止的进程调用 wait()➌。wait()和poll()现在返回
0,说明该进程终止且无错。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。