我知道我可以使用 os 模块创建一个新目录。但我试图用 subprocess 模块创建一个新目录,如下所示:
p=subprocess.Popen("mkdir extractions", shell=True)
os.chdir("extractions")
当脚本执行时,我注意到创建了目录提取但下一个 os.chdir 调用失败,说目录提取不存在。我知道我在使用子进程方面遗漏了一些东西,这使得下一行不知道创建的目录。请帮忙!
我知道我可以使用 os 模块创建一个新目录。但我试图用 subprocess 模块创建一个新目录,如下所示:
p=subprocess.Popen("mkdir extractions", shell=True)
os.chdir("extractions")
当脚本执行时,我注意到创建了目录提取但下一个 os.chdir 调用失败,说目录提取不存在。我知道我在使用子进程方面遗漏了一些东西,这使得下一行不知道创建的目录。请帮忙!
在调用 os.chdir 之前,您可能需要调用p.wait()
以等待 mkdir 完成。或者更好(stdout, stderr) = p.communicate()
的是,使用 并检查结果。
为什么不使用 os.mkdir("extractions")?你甚至可以使用 subprocess.call("mkdir extracts") 这两种方法都可以在 Popen 之后,你必须做一些类似communicate()
p1 = subprocess.Popen('mkdir extractions', shell=True)
p1.communicate()
但是,这与仅使用 subprocess.call("mkdir extracts", shell=True) 相同。
>>> import os
>>> import subprocess
>>> p=subprocess.Popen("mkdir extractions", shell=True)
>>> os.chdir("extractions")
这对我有用(在 OSX 上)。你在运行什么操作系统?你试过 os.popen 吗?
调用它会更快os.mkdir
,而且——虽然这种差异实际上不太可能对你的系统产生任何明显的影响——你正在产生创建一个全新进程和运行一个完整的单独程序的开销,然后(假设你接受了建议任何其他 [正确] 答案)等待它通知告诉您它已完成,而不是仅调用内核中的函数。