Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从我的程序';的输出被重定向到_Python_Io Redirection - Fatal编程技术网

Python 从我的程序';的输出被重定向到

Python 从我的程序';的输出被重定向到,python,io-redirection,Python,Io Redirection,我有一个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() f

我有一个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

有什么办法吗。

在尝试访问文件中的数据之前,可能必须先保存(关闭)文件。您可能希望尝试使用os.system()调用来“触摸”文件,即创建一个名为“output.txt”的新文件,然后写入,然后再次读取。

在尝试访问文件中的数据之前,您可能必须先保存(关闭)文件。您可能希望尝试使用os.system()调用来“触摸”文件,即创建一个名为“output.txt”的新文件,然后写入,然后再次读取。

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

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


如果您可以修改
process.py
,将其更改为
return
yield
如果调用者还没有执行此操作的代码路径,则只需将其从代码中导入,而不是将其作为带重定向的单独进程运行。

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

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


如果您可以修改
process.py
,将其更改为
return
yield
如果调用者还没有执行此操作的代码路径,则只需将其从代码中导入,而不是将其作为带重定向的单独进程运行。

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


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

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


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

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


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

相反,如果您接受输出文件作为参数,那么在程序运行时,您可以对其执行的操作没有任何限制——超出了您自己在程序文档中所保证的范围。例如,如果这是一个“输出文件”,您只能向用户承诺,在您的程序完成后,该文件将有其“输出”。

但是,从“输出文件”读取仍然不常见,您需要明确声明您可以在程序的帮助中执行此操作,因为这意味着用户必须确保目标文件也是无限可读的,而不仅仅是可写的(例如,他们可能会以其他方式传递它)将程序接受输出文件的方式更改为
python process.py output.txt


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

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