Python Popen创建一个新目录

Python Popen创建一个新目录,python,Python,我知道我可以用操作系统模块创建一个新目录。但我尝试使用子流程模块创建一个新目录,如下所示: p=subprocess.Popen("mkdir extractions", shell=True) os.chdir("extractions") 当脚本执行时,我注意到已经创建了目录提取,但是下一个os.chdir调用失败,说目录提取不存在。我知道我在使用子流程方面遗漏了一些东西,这使得下一行不知道创建的目录。请帮忙 在调用os.chdir之前,您可能需要调用p.wait()等待mkdir完成。或

我知道我可以用操作系统模块创建一个新目录。但我尝试使用子流程模块创建一个新目录,如下所示:

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

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

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

>>> import os
>>> import subprocess
>>> p=subprocess.Popen("mkdir extractions", shell=True)
>>> os.chdir("extractions")
这对我来说很有效(在OSX上)。你在运行什么操作系统?你试过os.popen吗?

为什么不使用os.mkdir(“提取”)? 您甚至可以使用subprocess.call(“mkdir提取”) 这两种方法都会奏效 在Popen之后,您必须执行类似于communicate()的操作


但是,这与仅使用subprocess.call(“mkdir extractions”,shell=True)是一样的。

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

如果您在解释器中执行了此操作,那么这是因为最后两个命令之间的延迟。在脚本中,将在mkdir进程完成之前调用os.chdir!在这种情况下有什么解决办法吗?在我们继续下一行之前,是否可以等待创建新目录的子进程终止?是的,正如我在回答中提到的那样,p.wait()将完全完成此操作。请注意,如果希望p.communicate()捕获(stdout,stderr),则需要使用stdout=PIPE,stderr=PIPE作为Popen的参数。您能告诉我这是什么吗(stdout,stderr)=p.communicate()'是否?如果使用Popen.communicate(“mkdir提取”,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE),那么p.communicate()将调用mkdir,并返回一个2-ple(stdout,stderr).stdout包含标准输出-即发送到终端的正常输出,对于mkdir来说可能是一个空字符串。stderr是标准错误-即,如果命令未成功完成,例如,如果您没有创建目录的权限,或者目录已存在,则任何警告或错误消息“call mkdir”可能不是正确的短语。Popen已经调用了它,但由于您告诉它将输出返回到脚本,因此输出正在等待与您“通信”。您可以使用stdin=subprocess.pipe将输入传递到进程。
p1 = subprocess.Popen('mkdir extractions', shell=True)
p1.communicate()