[英]How to connect Paramiko stdin, stdout and stderr to console?
[英]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
我的問題是,如何流式傳輸/緩沖輸入和輸出,以不斷與程序通信,而不必一次又一次地創建和讀取文件?
嘗試用這種方法重新思考你的程序。
./mycode.py -gen | sqlite3 | ./mycode.py -proc
您的程序將接受一個用於選擇行為的命令行參數
(從 SQL 生成輸入或處理輸出)
人物|
是 Bash 中的管道操作數
處理 SQL 輸出的函數必須讀取stdin
您必須閱讀並驗證命令行參數並選擇執行兩個不同的函數。
請參閱此處如何讀取/處理命令行參數?
關於 bash 中的管道
command1 | command2
command1
的標准輸出通過管道連接到command2
的標准輸入。
示例: echo "my password" | shasum -a 256
echo "my password" | shasum -a 256
請參閱此處有關如何讀取標准輸入的幾個示例您如何從標准輸入讀取?
請參閱此處的示例代碼。 下面是一個示例輸出(在 macOS 和 Ubunto 中使用 SQLite 測試):
> ./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
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.