3

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

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

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

4

4 回答 4

6

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

于 2012-05-04T02:56:11.777 回答
1

为什么不使用 os.mkdir("extractions")?你甚至可以使用 subprocess.call("mkdir extracts") 这两种方法都可以在 Popen 之后,你必须做一些类似communicate()

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

但是,这与仅使用 subprocess.call("mkdir extracts", shell=True) 相同。

于 2012-05-04T03:38:19.347 回答
0
>>> import os
>>> import subprocess
>>> p=subprocess.Popen("mkdir extractions", shell=True)
>>> os.chdir("extractions")

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

于 2012-05-04T02:58:25.993 回答
0

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

于 2012-05-04T03:53:22.313 回答