簡體   English   中英

將popen輸出重定向到python中的文件

[英]redirecting popen output to file in python

我已經看到很多答案,說stdout=file將重定向到文件。 但是我有幾個疑問。

  1. 為什么>file不起作用。

     subprocess.Popen([SCRIPT, "R", ">", FILE, "2>", "/dev/null"]) 
  2. 這樣好嗎

     with open(FILE,'w+') as f: subprocess.Popen([SCRIPT, stdout=f] f.close() 

就我而言,我試圖在一個無限循環(不會停止)中運行腳本,並且還有其他一些進程在監視其輸出。

即使關閉f后,腳本是否仍在繼續寫入腳本。 如果是,它如何工作?

由於subprocess不允許使用>來重定向文檔中的輸出和錯誤消息,因此:

stdinstdoutstderr指定執行程序的標准輸入,標准輸出和標准錯誤文件句柄。 有效值為PIPEDEVNULL ,現有文件描述符(正整數),現有文件對象和None

PIPE指示應創建到子級的新管道。 DEVNULL表示將使用特殊文件os.devnull 使用默認設置None ,將不會發生重定向。 子級的文件句柄將從父級繼承。

另外, stderr可以是STDOUT ,這表示來自應用程序的stderr數據應捕獲到與stdout.相同的文件句柄中stdout.


並且您應該使用以下代碼:

with open(FILE, 'w+') as f:
    subprocess.Popen([SCRIPT, 'R'],  stdout=f, stderr=subprocess.DEVNULL))

因為你使用with ,因此無需關閉文件。

我想你一定要努力

with open(FILE,'w+') as f:
    subprocess.Popen([SCRIPT, stdout=f, stderr=f])

暫無
暫無

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

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