如何 'catch' Python 中程序的标准输入、标准输出、标准错误?
How to 'catch' stdin, stdout, stderr of a program in Python?
我有一个 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
您的程序将接受一个选择行为的命令行参数
(从 SQL 生成输入或处理输出)
字符|
是Bash
中的流水线操作数
处理SQL输出的函数必须读取stdin
命令行参数
您必须阅读并验证命令行参数并选择执行两个不同的函数。
看这里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 示例代码。
下面是一个示例输出(使用 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
...
我有一个 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
您的程序将接受一个选择行为的命令行参数
(从 SQL 生成输入或处理输出)字符
|
是Bash 中的流水线操作数
处理SQL输出的函数必须读取
stdin
命令行参数
您必须阅读并验证命令行参数并选择执行两个不同的函数。
看这里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 示例代码。 下面是一个示例输出(使用 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
...