我知道我可以使用os模块创建一个新目录。但我试图用子进程模块创建一个新目录,如下所示:
p=subprocess.Popen("mkdir extractions", shell=True)
os.chdir("extractions")
当脚本执行时,我注意到创建了目录 extractions 但是下一个os.chdir调用失败,说目录 extractions 不存在。我知道我在使用子进程方面缺少一些东西,这使得下一行不知道创建的目录。请帮忙!
答案 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
会更快,而且差异不太可能对您的系统产生任何明显影响 - 您将产生创建全新流程和运行整个单独程序的开销,然后(假设你接受任何其他[正确]答案的建议)等待它通知告诉你它已经完成而不只是在内核中调用一个函数。