【问题标题】:Can't seem to write error to output file if a script doesn't run correctly如果脚本未正确运行,似乎无法将错误写入输出文件
【发布时间】:2020-08-23 04:08:48
【问题描述】:

我编写了一个函数,它读取并运行 python 脚本,然后将其输出发送到文本文件。 如果它运行的脚本损坏/不起作用,我试图让它向文本文件写入一个简单的字符串或有问题的错误。 以下是有问题的代码:

                file_dir = a_dir[0]
                file_name = a_dir[1][:-3]
                with open(f'{self.output_directory}\\output_{file_name}.txt', 'w') as f:
                    try:
                        subprocess.call(
                            [sys.executable, file_dir], stdout=f)
                    except:
                        f.write("An error occured with the script")

它的第一部分工作正常 - 它确实运行一个正常运行的文件并写入输出。

我需要更具体地说明错误异常吗?任何帮助将不胜感激!

【问题讨论】:

    标签: python stdout sys


    【解决方案1】:

    如果您的代码工作正常并且 sys.executable 正在运行,那么不会有异常,因此您的 f.write 代码将不会运行。如果您使用子进程运行的程序中存在错误,这不会传播到您运行它的程序中的异常。您必须对这个程序有所了解才能知道存在错误,您可以从 subprocess.call 函数调用中查看 [returncode][1]。另一种选择是,您可以自己加载模块,然后使用 try except 块从其中运行代码,而不是运行新的 python 解释器。如果您不能依赖文件的任何结构,那么您可以将文件作为文本读取,然后使用 eval 或 exec 在 try except 结构中运行其中的代码,如果您对文件一无所知提前执行它很可能是一个巨大的安全漏洞,更不用说在正在运行的应用程序的上下文中了。

    **late edit 将文件读取为文本副测试,这是一个错字 [1]:https://docs.python.org/3/library/subprocess.html#subprocess.Popen.returncode

    【讨论】:

      猜你喜欢
      • 2018-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-02
      • 1970-01-01
      • 2020-03-22
      • 2014-11-21
      • 2021-06-07
      相关资源
      最近更新 更多