【问题标题】:What is a common/practical use of Popen.wait()Popen.wait() 的常见/实际用途是什么
【发布时间】:2018-02-22 10:05:33
【问题描述】:

我正在尝试理解这行代码:

def delete_dir(dir):
    with open('/dev/null', 'w+') as null:
        subprocess.Popen("rm -r %s" % dir, shell=True, stdout=null, stderr=null).wait()

我是编程新手,所以我缺乏理解为什么这个过程设置为等待的上下文。将进程设置为等待有哪些常见的实践实现。谢谢

【问题讨论】:

  • 请注意,在这种特殊情况下,您根本不应该使用subprocess,而应该使用shutil.rmtree(dir)
  • wait() 在子进程退出之前不会返回。以这种方式它会阻塞,直到可以确定子进程的状态。尽管我认为这在您的代码示例中不是特别清楚,但这通常是可取的,例如,为了防止父进程和子进程以不一致的方式竞争相同的资源。

标签: python-2.7 subprocess


【解决方案1】:

Popen.wait 不告诉进程 等待,它告诉我们的脚本 在继续执行之前等待进程终止。当子进程正在做一些会影响我们脚本行为的事情时,这很有用。

在这种情况下,我们在继续之前等待rm -r 命令完成删除给定目录,因为如果我们的函数被调用delete_dir,调用者期望目录在函数返回。


with open('/dev/null', 'w+') as null(如果您好奇的话)的目的是通过将其stdoutstderr 传递到/dev/null 句柄来抑制子进程的任何输出。

【讨论】:

  • 感谢您澄清这一点,然后加倍努力解释 /dev/null “文件名”。我一直在想。 Open() 处理文件对象,但 /dev/null 并不是传统意义上的真正文件,所以我很惊讶 Open() 可以对其进行操作。
  • @H3G3moKnight Unix 的乐趣之一 - everything is a file
猜你喜欢
  • 2011-04-02
  • 2019-05-17
  • 2015-04-22
  • 2021-07-22
  • 1970-01-01
  • 2011-09-20
  • 2015-06-07
  • 1970-01-01
相关资源
最近更新 更多