svn_output = check_output(['svn', 'info', path_to_my_working_copy])
# svn_output now contains the svn info output. If it failed, an
# exception is thrown which more easily allows you to give
# responsibility of that failure to whoever passed us the wrong
# path_to_my_working_copy.
my_proc = Popen(['my-daemon'])
# We're going to go and do something else now, but want to make sure
# my_proc dies when we do.
import atexit
atexit.register(my_proc.kill)
以一些例子来阐述“奥托里拉”的答案。
假设你有一个简短的脚本,你只关心它是否成功*,你只想现在就做,然后等待结果。例如,假设您想向远程计算机发送一个ping。
call
是您的选择:现在假设你有一个命令,你想假设它会成功,并且会给你一些你想用来做某事的输出。
check_output
是给你的。也许是一个subversion命令:一般来说,如果您的用例不属于这些类别中的一个,那么您可能最终会使用
Popen
。一个简单的用例可能是,假设您有一个要启动的守护进程,但随后会与您的python进程一起运行。现在使用
Popen
:NB:如果使用
Popen
raw,则必须确保终止进程,可能使用atexit
如我所示。*“非零”退出状态表示进程失败。一个著名的计算机科学引述到Tolstoy是“快乐的过程都是相似的;每一个不快乐的过程都以自己的方式不快乐”,也就是说,只有一个过程是快乐的:返回0。其他的事情都不快乐,但是有很多不快乐的方法。
主要区别在于,虽然^{} 是一个非阻塞函数(意味着您可以在不等待调用完成的情况下继续执行程序),但是^{} 和^{} 都是阻塞。
另一个区别在于它们返回的内容:
Popen object
。方法^{} 和^{} 实际上是使用} 的包装器。
例如,可以通过调用} 属性。
Popen object
阻塞^{Popen.returncode()
来获取^{相关问题 更多 >
编程相关推荐