Python subprocess.Popen创建一个新目录

时间:2012-05-04 02:52:48

标签: python

我知道我可以使用os模块创建一个新目录。但我试图用子进程模块创建一个新目录,如下所示:

p=subprocess.Popen("mkdir extractions", shell=True)
os.chdir("extractions")

当脚本执行时,我注意到创建了目录 extractions 但是下一个os.chdir调用失败,说目录 extractions 不存在。我知道我在使用子进程方面缺少一些东西,这使得下一行不知道创建的目录。请帮忙!

4 个答案:

答案 0 :(得分:6)

在调用os.chdir之前,您可能希望调用p.wait()等待mkdir完成。或者甚至更好,使用(stdout, stderr) = p.communicate(),并检查结果。

答案 1 :(得分:1)

为什么不使用os.mkdir(“提取”)? 你甚至可以使用subprocess.call(“mkdir extractions”) 这两种方法都可行 在Popen之后,你必须做一些像沟通()

p1 = subprocess.Popen('mkdir extractions', shell=True)
p1.communicate()

但是,这与使用subprocess.call(“mkdir extractions”,shell = True)相同。

答案 2 :(得分:0)

>>> import os
>>> import subprocess
>>> p=subprocess.Popen("mkdir extractions", shell=True)
>>> os.chdir("extractions")

这对我有用(在OSX上)。你在运行什么操作系统?你试过os.popen吗?

答案 3 :(得分:0)

调用os.mkdir会更快,而且差异不太可能对您的系统产生任何明显影响 - 您将产生创建全新流程和运行整个单独程序的开销,然后(假设你接受任何其他[正确]答案的建议)等待它通知告诉你它已经完成而不只是在内核中调用一个函数。