从我的程序输出被重定向的文件中读取

2024-04-19 08:50:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个python程序。它输出一些行。 我把它当作-

python process.py > output.txt

在执行process.py时,我想从process.py打开output.txt并使用保存的数据

 with open("output.txt", 'r', encoding='utf-8') as template_file:
      template_file_content = template_file.readlines()
            for line in template_file_content:
                # use it

有什么办法吗


Tags: 数据py程序txtoutputaswithtemplate
3条回答

当您以调用程序的方式调用程序时,不应该这样做将程序接受输出文件的方式更改为python process.py output.txt


使用> output.txt,程序将写入sys.stdout<接下来对这些数据的处理不是你程序的事,而是用户的事。这是标准流的接口,您可以在使用它们时注册。
即使您能够以某种方式破坏此限制,这也会违反接口(从而使您的程序有问题)和不可靠(例如,输出可能不是到文件,而是到任何数量的其他可能的目标,具体取决于操作系统)

相反,如果您接受输出文件作为参数,那么在程序运行时,您可以对其执行的操作没有任何限制——超出了您自己在程序文档中保证的范围。例如,如果这是一个“输出文件”,您只能向用户保证,在您的程序完成后,该文件将有其“输出”。
然而,从“输出文件”读取仍然是不常见的,您需要在程序的帮助中明确说明您可以这样做,因为这意味着用户必须确保目标也是无限可读的,而不仅仅是可写的(例如,他们可能会传递一个named pipe

一种方法是保存在程序本身的列表中,而不是使用output.txt中的数据。这样您就不必处理文件访问冲突

另一种方法是将output.txt作为参数放入python程序,并从程序内部写入。完成写入后关闭文件,并在读取时再次打开

不,在生产过程完成之前,输出重定向的结果不能可靠地用于生产过程。特别是,许多操作系统将应用输出缓冲,这意味着只有在Python运行完毕后,shell关闭打开的文件句柄时,才能保证文件被完全写入

一种可能的解决方法是为process.py编写一个包装器,并将其输出捕获到一个变量,然后再将其写入标准输出

如果要修改process.py,请将其更改为returnyield,如果调用者还没有执行此操作的代码路径,则只需从代码中import将其输出到调用者,而不是将其作为带重定向的单独进程运行

相关问题 更多 >