有没有办法连续运行三个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

我有三个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
时,没有
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您应该能够使用您已经拥有的任何代码,并将其缩进功能。然后返回它创建的文件的路径。