gpt4 book ai didi

python - 在 Python 中创建目录然后打开其中的文件时出错,但如果目录已存在则不会出错

转载 作者:行者123 更新时间:2023-11-28 21:09:30 27 4
gpt4 key购买 nike

我希望创建一个目录,然后在其中打开一个文件,以便在我在 Python 2.6.6 中执行下面的代码时写入,

import subprocess

def create_output_dir(work_dir):
output_dir = '/work/m/maxwell9/some_name5/'
subprocess.Popen(['mkdir', output_dir])
return output_dir

if __name__ == '__main__':
work_dir = '/work/m/maxwell9/'
output_dir = create_output_dir(work_dir)
#output_dir = '/work/m/maxwell9/some_name5/'
filename = output_dir + 'bt.sh'
with open(filename, 'w') as script:
print('there')

但是我得到了错误,

Traceback (most recent call last):
File "slurm_test.py", line 13, in <module>
with open(filename, 'w') as script:
IOError: [Errno 2] No such file or directory: '/work/m/maxwell9/some_name5/bt.sh'

如果我运行脚本,我可以看到目录已创建。如果我然后取消注释该行,

#output_dir = '/work/m/maxwell9/some_name5/'

并注释该行,

output_dir = create_output_dir(work_dir)

然后文件输出正常。因此,创建文件夹然后在导致错误的同一脚本中写入它。

最佳答案

subprocess.Popen 启动一个外部进程,但不会等待它完成,除非您告诉它(例如,通过在返回的 Popen 上调用 .wait实例)。最有可能的是,mkdir 正在创建一个目录,而 open(filename, 'w') 试图在该目录中创建一个文件。这是 "race condition" 的示例.

解决方案是在打开的进程上.wait(如上所述),或者您可以使用方便的包装器之一subprocess.check_outputsubprocess.check_call或者(甚至更好),您可以通过使用 os.mkdir 完全避免 subprocessos.makedirs

关于python - 在 Python 中创建目录然后打开其中的文件时出错,但如果目录已存在则不会出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38258758/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com