有人可以帮我找到一种方法将program1的输出作为python中的program2的输入发送 将其保存为 .csv 文件不会对我有帮助,因为该程序应该尽快执行这些任务。 因此我正在寻找一种方法将程序1的终端输出直接发送到程序2
在 Python 中,可以使用子进程模块将一个程序的输出发送到另一个程序的输入。
subprocess
模块提供了一种创建新进程、连接到其输入/输出/错误管道以及获取其返回代码的方法。
方法 1:使用
subprocess.PIPE
此方法使用管道将
program1
的输出连接到
program2
的输入。
import subprocess
# 运行 program1 并将其输出捕获到管道中
process1 = subprocess.Popen(["program1", "arg1", "arg2"], stdout=subprocess.PIPE)
# 运行 program2,将 program1 的输出作为输入
process2 = subprocess.Popen(["program2", "arg1"], stdin=process1.stdout, stdout=subprocess.PIPE)
# 可选:获取 program2 的输出
output, error = process2.communicate()
# 等待进程完成
process1.wait()
process2.wait()
解释:
-
subprocess.Popen()
用于创建进程对象。 -
stdout=subprocess.PIPE
将program1
的标准输出重定向到一个管道。 -
在
program2
的subprocess.Popen()
中,stdin=process1.stdout
将program1
的输出管道设置为program2
的输入。 -
process2.communicate()
用于读取program2
的输出(如果需要)。 -
process1.wait()
和process2.wait()
等待两个进程完成执行。
方法 2:使用
subprocess.check_output()
如果只需要
program2
的输出,则可以使用
subprocess.check_output()
:
import subprocess
# 运行 program1 并捕获其输出
output1 = subprocess.check_output(["program1", "arg1", "arg2"])
# 运行 program2,将 program1 的输出作为输入
output2 = subprocess.check_output(["program2", "arg1"], input=output1)
# 打印 program2 的输出
print(output2.decode())
解释:
-
subprocess.check_output()
运行一个命令并返回其输出。 -
program1
的输出存储在output1
中。 -
output1
作为input
参数传递给program2
的subprocess.check_output()
。 -
output2
包含program2
的输出。
注意:
- 用要运行的实际程序的名称替换 “program1” 和 “program2”。
- 将 “arg1”,“arg2” 等替换为程序所需的任何参数。
-
如果程序输出的是字节而不是字符串,可能需要使用
output.decode()
对其进行解码。
这些方法允许在不使用中间文件的情况下将一个程序的输出直接发送到另一个程序的输入。
标签:python From: 78805609