我正在制作一个python模块来帮助管理Linux(和BSD)中的一些任务 - 即管理Linux容器。我知道从python运行终端命令的几种方法,例如 Popen(), call()和 check_call() 。我应该何时使用这些特定功能?更具体地说,何时使用阻止或非阻塞功能?
我有构建要运行的命令的函数,然后使用Popen将命令(列表)传递给另一个函数来执行它。
传递如下命令:
['lxc-start', '-n', 'myContainer']
到
...
def executeCommand(command, blocking=False):
try:
if blocking:
subprocess.check_call(command)
else:
(stdout, stderr) = Popen(command, stdout=PIPE).communicate()
self.logSelf(stdout)
except:
as_string = ' '.join(command)
logSelf("Could not execute :", as_string) #logging function
return
...
代码默认使用 Popen(),这是一个非阻塞函数。我应该在哪种情况下覆盖阻止并让函数执行 check_call()?
我最初的想法是在进程是一次性临时进程(例如创建容器)时使用阻塞,并在进程持续运行时使用非阻塞,例如启动容器。
我是否正确理解了这些功能的用途?
答案 0 :(得分:1)
要回答更广泛的问题 - 我建议:
当您执行以下操作时使用阻止呼叫:
如果可以,请在所有其他情况下使用非阻止呼叫,尤其是: