如何在Python中“捕获”程序的stdin,stdout,stderr?

问题描述 投票:1回答:1

我有一个sql.exe,它具有命令行界面,以sql查询作为输入并输出结果。我需要用Python编写一个程序,该程序将生成sql命令,将它们作为输入传递给该程序并读取输出。

为了锻炼,我用python adder.py编写了一个玩具程序:

if __name__ == '__main__':
    while True:
        try:
            line = input()
            a, b = line.strip().split()
            c = int(a) + int(b)
            print(c)
        except EOFError:
            exit()
        except:
            continue

我已经创建了一个in.txt文件:

10 5
7 3
1 a
2 1

我从cmd执行:-$ python adder.py < in.txt > out.txt而out.txt是:

15
10
3

我的问题是,我该如何流式传输/缓冲输入和输出,以与程序进行持续通信,而不必一次又一次地创建和读取文件?

python command-line-interface stdout stdin
1个回答
0
投票

使用重击管道

尝试用这种方法重新考虑您的程序。

adder.py -generate | sql.exe | adder.py -process
  1. 您的程序将接受一个用于选择行为的命令行参数(从SQL生成输入或处理输出)

  2. 字符|是Bash中的管道操作数

  3. 处理SQL输出的函数必须读取标准输入

命令行参数

您必须阅读并验证命令行参数,然后选择执行两个不同的功能。看到这里How to read/process command line arguments?

Bash管道

关于bash中的管道

command1 | command2

command1的标准输出通过管道连接到command2的标准输入。例如echo "my password" | shasum -a 256

从标准输入中读取

请参阅此处,了解如何阅读标准输入的示例How do you read from stdin?

示例代码

请参见here示例代码。将代码复制到您的计算机上,然后尝试以下操作:./adder.py -gen | cat | ./adder.py -proc

© www.soinside.com 2019 - 2024. All rights reserved.