如何'catch'Python中程序的stdin、stdout、stderr



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

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

在代码中使用bash管道和两个不同的函数

尝试用这种方法重新思考你的程序。

./mycode.py -gen | sqlite3 | ./mycode.py -proc
  1. 您的程序将接受一个命令行参数,该参数选择行为
    (从SQL生成输入或处理输出(

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

  3. 处理SQL输出的函数必须读取stdin

命令行参数

您必须读取并验证命令行参数,然后选择执行两个不同的函数
请参阅此处如何读取/处理命令行参数?

Bash管道

关于bash 中的管道

command1 | command2

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

从stdin读取

请参阅以下几个如何读取stdin的示例你是如何从stdin读取的?

示例代码

请参阅此处的示例代码。下面是一个示例输出(使用SQLite在macOS和Ubunto中测试(:

> ./mycode.py -gen
SELECT 0 + 0;
SELECT 1 + 2;
SELECT 2 + 4;
...
> ./mycode.py -gen | sqlite3
0
3
6
...
> # ./mycode.py -proc multiply by 10 the stdin
> ./mycode.py -gen | sqlite3 | ./mycode.py -proc
0
30
60
...

相关内容

  • 没有找到相关文章

最新更新