首页 > 解决方案 > Python:打开函数无法打开带有附加的新文件

问题描述

我正在编写一个自定义ansible模块。

以下是它的调用方式:

  - name: mymodule.yml -> Run mymodule
    mymodule:
      test_file: "{{ item }}"
      env_file: "{{ environment_file.stdout }}"
      out_dir: "{{ nginx_folder }}/{{ rv_dir_name.stdout }}"
      base_url: "{{ results_base_url }}"
    become: yes

在某个时间点,在模块内,会调用以下 python 命令:

# use file for the stderr descriptor of the subprocess.call
try:
    # os.mkdir(_out_dir, 0755 )
    ferr = open('std_err.log', 'w')
    # fout = open('std_out.log', 'w')   
    fout = open(_out_dir + "/" + 'std_out.log', 'a')
except Exception as exc:
    module.fail_json(msg="Hello: " + str(exc))
# fout = open('std_out.log', 'a')

当我执行模块时,以下行给出了这个错误:

"msg": [Errno 2] 没有这样的文件或目录:'/var/www/html/newman-tests/2019-03-25_09:34:04/std_out.log'",

为什么它无法创建/打开文件,尽管事实是:

a)该模块被调用become: yes

b)open调用a它应该创建文件,如果它不存在?

编辑:该文件夹确实存在,因为提前调用它

os.mkdir(_out_dir, 0755 )

失败directory exists

更重要的是,在我的模块下面的几行我称之为:

rc = call(["newman", "run", _test_file, "-k", "-e", _env_file, "-r", "htmlextra,cli", "--reporter-html-report", "--reporter-htmlextra-export", _output], stderr=ferr)

在哪里

_output = _out_dir + "/" + _report_fname

_out_dir是上述open失败的相同目录

(这工作正常)

标签: pythonansible

解决方案


a+如果文件不存在,则创建该文件。读取的初始文件位置在文件的开头,但输出附加到文件的末尾。


推荐阅读