簡體   English   中英

Python-寫入stdin的子進程,以便主程序可以從stdin中讀取它

[英]Python - a subprocess writing to stdin so that the main program can read it from the stdin

我有一個從stdin接收輸入的python程序。 現在,我必須編寫另一個程序並將其作為子進程調用,以便每次啟動該子進程時,它都應從另一個文本文件讀取數據並將其寫入stdin,然后我的主程序從stdin讀取並使用它。

out.py:

from subprocess import Popen, PIPE, STDOUT

import os

import sys

def read():
    p = Popen(['python', 'in.py'], stdout=PIPE, stdin=PIPE, stderr=STDOUT)

    out = p.communicate()

    print out[0]

def main():
    read()

if __name__ == "__main__":
    main()

in.py:

import sys,os

import subprocess

def main():

    f = open("ad.txt","r")

    for line in f:
        print line

if __name__ == "__main__":
    main()

基本上,我的問題是in.py讀取整個文件並打印到我不想要的STDOUT中,而是應該一次傳遞一個字符。 如果ad.txt是這樣的:

asdfgh

我應該先得到"a"然后是"s"然后是"d"然后是"f" ..依此類推..每次我調用該函數時,都應逐個字符地讀取文件中的下一個字符。 就是這樣! ew! 請幫助我,我有很多工作要做! 先謝謝了

第一個程序應從文件(或stdin )讀取並寫入stdout (而不是stdin )。 同樣,第二個程序應從stdin讀取並寫入stdout 現在,您可以使用管道符號在命令行中將它們粘合在一起:

python first.py | python second.py

而已! 這些程序都不需要知道其他程序。 那就是使用“流水線”的美妙之處。

附錄:Shell流水線在緩沖區上工作。 Shell偵聽第一個程序,並用其輸出填充緩沖區。 同時,第二個程序只要有要讀取的內容就從緩沖區讀取,否則它會空閑。 通信是同時進行的,僅需要固定大小的內存。

示例代碼:

# first.py
import sys
for line in open("input.txt"):
    processed_line = process_line(line)
    sys.stdout.write(processed_line)

# second.py
import sys
for line in sys.stdin:
    processed_line = process_line(line)
    sys.stdout.write(processed_line)

這些示例遍歷行(如果使用文本文件,則更好)。 您可以輕松地逐字節執行相同的操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM