有没有办法连续运行三个python文件,因为每个文件的输出都依赖于另一个
我有三个python文件有没有办法连续运行三个python文件,因为每个文件的输出都依赖于另一个,python,csv,file-io,subroutine,Python,Csv,File Io,Subroutine,我有三个python文件file1.py,file2.py,file3.py。每个文件将生成一个.csv文件,并按顺序将其交给另一个文件。要详细说明file1.py将生成file1.csv,此.csv文件将作为file2.py的输入,依此类推 import file1 import file2 import file3 file1 file2 file3 IOError: File file2.csv does not exist 问题是当我导入file2.py时,没有fil
file1.py
,file2.py
,file3.py
。每个文件将生成一个.csv
文件,并按顺序将其交给另一个文件。要详细说明file1.py
将生成file1.csv
,此.csv
文件将作为file2.py
的输入,依此类推
import file1
import file2
import file3
file1
file2
file3
IOError: File file2.csv does not exist
问题是当我导入
file2.py
时,没有file1.csv
,因为它尚未执行。请告诉我如何在不阅读下一个python文件的情况下按顺序调用每一个函数 您可以从命令行执行管道
python file1.py|python file2.py|python file3.py
这些文件将使用sys.stdin/sys.stdout作为csv读写器
编辑
您可以编写一个控制器脚本,将它们全部触发。sys.executable只是用于启动脚本的python。。。我使用它是为了让它们都使用相同的python
import sys
import subprocess as subp
file1 = subp.Popen([sys.executable, 'file1.py'], stdout=subp.PIPE)
file2 = subp.Popen([sys.executable, 'file2.py'], stdin=file1.stdout, stdout=subp.PIPE)
file3 = subp.Popen([sys.executable, 'file3.py'], stdin=file2.stdout)
# close parent version of pipes
file1.stdout.close()
file2.stdout.close()
# wait for programs to complete
file1.wait()
file2.wait()
file3.wait()
每个脚本都应设置为生成文件的函数或类。总体结构可以是这样的:
# file1.py
def generate_csv(filename):
# put your file generation code here
# you could easily use Python's csv module, for example
return csv_filename
# main.py
import file1, file2, file3
def main(filename):
fname_one = file1.generate_csv(filename)
fname_two = file2.generate_csv(fname_one)
fname_three = file3_generate_csv(fname_two)
然后在主脚本中,可以调用每个脚本,如下所示:
# file1.py
def generate_csv(filename):
# put your file generation code here
# you could easily use Python's csv module, for example
return csv_filename
# main.py
import file1, file2, file3
def main(filename):
fname_one = file1.generate_csv(filename)
fname_two = file2.generate_csv(fname_one)
fname_three = file3_generate_csv(fname_two)
这样可以防止在导入时运行原始脚本。主脚本控制执行顺序,并可以对返回的第三个文件名执行任何需要执行的操作。如果希望在这种设置中从
sys.argv
读取并输出到stdout
,则应该可以:
注意:前导的$
表示这是一个bash shell命令
尽管如此,还是要小心。在将其传递给第二个脚本之前,我通常会
$echo$(python file1.py)
。您不必导入顶部的所有内容。你可以导入,运行,导入,运行。@uʍopǝpısdn我甚至试过了,但是python会先读取所有导入文件,然后再运行这些文件。但是python会先读取所有导入文件,然后再运行这些文件。
看起来你需要一些认真的重构;你的脚本在导入时通常不会做任何事情。我想我对现在发生的事情有了更好的了解。。。。file1.py等。。。应定义将csv文件作为输入并返回csv文件作为输出的函数。导入顶部的所有模块,然后逐个调用函数。我使用canopy作为IDE。此外,我还需要从一个文件中依次运行所有文件。@tdelaney我正在获取AttributeError:type对象“file”没有属性“stdout”,我正在获取以下错误值error:no columns to parse from files您应该能够使用您已经拥有的任何代码,并将其缩进功能。然后返回它创建的文件的路径。