首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >与os.fork一起使用python

与os.fork一起使用python
EN

Stack Overflow用户
提问于 2017-02-07 15:59:20
回答 1查看 318关注 0票数 1

我很好奇是否在python规范中定义了with with os.fork的行为,以及我应该如何与os.fork一起使用。

如果我这样做了,例如:

代码语言:javascript
代码运行次数:0
运行
复制
import tempfile
import os
with tempfile.TemporaryDirectory() as dir:
  pid = os.fork()
  print(pid)
  print(dir)

然后,它似乎在使用删除TemporaryDirectory两次的天真行为:

代码语言:javascript
代码运行次数:0
运行
复制
> python3 foo.py
27023
/tmp/tmpg1typbde
0
/tmp/tmpg1typbde
Traceback (most recent call last):
  File "foo.py", line 6, in <module>
    print(dir)
  File "/usr/lib/python3.4/tempfile.py", line 824, in __exit__
    self.cleanup()
  File "/usr/lib/python3.4/tempfile.py", line 828, in cleanup
    _rmtree(self.name)
  File "/usr/lib/python3.4/shutil.py", line 467, in rmtree
    onerror(os.rmdir, path, sys.exc_info())
  File "/usr/lib/python3.4/shutil.py", line 465, in rmtree
    os.rmdir(path)
FileNotFoundError: [Errno 2] No such file or directory: '/tmp/tmpg1typbde'

我想知道:

  1. 如果行为是实际定义的
  2. 如何最好地在两个进程之间共享一个临时目录
EN

回答 1

Stack Overflow用户

发布于 2017-02-07 16:31:05

不使用与,并这样做肮脏的老方式起作用。

代码语言:javascript
代码运行次数:0
运行
复制
> cat foo.py
import tempfile
import os
import shutil
temp_dir = tempfile.mkdtemp(prefix="foo")
pid = os.fork()
print(pid)
print(temp_dir)
if not pid:
  input("pid: %s\nPress enter to continue."%pid)
if pid:
  print("pid: %s\nWaiting for other pid to exit."%pid)
  os.waitpid(pid,0)
  shutil.rmtree(temp_dir)
  print("Bye")

代码语言:javascript
代码运行次数:0
运行
复制
> python3 foo.py
27510
/tmp/foopyvuuwjw
pid: 27510
Waiting for other pid to exit.
0
/tmp/foopyvuuwjw
pid: 0
Press enter to continue.
Bye
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42094399

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档