簡體   English   中英

在Python中將PIPE的輸出重定向到FILE

[英]Redirecting Output of PIPE to a FILE in python

以下代碼是將Pipe的輸出重定向到文件“ CONTENT”,並且其中包含一些內容,我想用“ sort CONTENT1 | uniq”的輸出覆蓋它。...但是我無法覆蓋它,並且我不知道天氣以下代碼是否重定向到CONTENT(即正確與否)。 請幫幫我。

f1=open('CONTENT','w')      
sys.stdout=f1  
p1 = subprocess.Popen(["sort", "CONTENT1"], stdout=subprocess.PIPE)   
p2 = subprocess.Popen(["uniq"], stdin=p1.stdout, stdout=subprocess.PIPE)  
p1.stdout.close()  
p2.communicate()   
sys.stdout=sys.__stdout__

這是捕獲第一個進程的輸出並將其傳遞給第二個進程的方法,該進程隨后將其輸出寫入文件:

import subprocess
with open('CONTENT','w') as f1:
  p1 = subprocess.Popen(["sort", "CONTENT1"], stdout=subprocess.PIPE)
  p2 = subprocess.Popen(["uniq"], stdin=subprocess.PIPE, stdout=f1)
  p1_out = p1.communicate()[0] # catch output
  p2.communicate(p1_out)       # pass input

您根本不應該修改sys.stdout 請注意,您需要為每個過程調用一次方法communicate 還要注意, communicate()將在將p1所有輸出傳遞給p2之前對其進行緩沖。

這是將p1的輸出逐行傳遞到p2

import subprocess
with open('CONTENT','w') as f1:
    p1 = subprocess.Popen(["sort", "CONTENT1"], stdout=subprocess.PIPE)
    p2 = subprocess.Popen(["uniq"], stdin=subprocess.PIPE, stdout=f1)
    out_line = p1.stdout.readline()
    while out_line:
        p2.stdin.write(out_line)
        out_line = p1.stdout.readline()

做管道的最干凈方法是:

import subprocess
with open('CONTENT','w') as f1:
  p1 = subprocess.Popen(["sort", "CONTENT1"], stdout=subprocess.PIPE)
  p2 = subprocess.Popen(["uniq"], stdin=p1.stdout, stdout=f1)
  p1.stdout.close()

當然,您也可以只使用Shell的功能,這些功能正是為這些任務而設計的:

import subprocess
with open('CONTENT','w') as f1:
    p = subprocess.Popen("sort CONTENT1 | uniq", shell=True,
                         stdout=f1)

參考: http : //docs.python.org/2/library/subprocess.html

暫無
暫無

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

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