我有一个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
我的问题是,我该如何流式传输/缓冲输入和输出,以与程序进行持续通信,而不必一次又一次地创建和读取文件?
尝试用这种方法重新考虑您的程序。
adder.py -generate | sql.exe | adder.py -process
您的程序将接受一个用于选择行为的命令行参数(从SQL生成输入或处理输出)
字符|是Bash中的管道操作数
处理SQL输出的函数必须读取标准输入
您必须阅读并验证命令行参数,然后选择执行两个不同的功能。看到这里How to read/process command line arguments?
关于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