簡體   English   中英

如何通過管道將子進程調用傳遞給文本文件?

[英]How do I pipe a subprocess call to a text file?

subprocess.call(["/home/myuser/run.sh", "/tmp/ad_xml",  "/tmp/video_xml"])

現在我有一個運行的腳本。 當我運行它並遇到此行時,它開始打印內容,因為 run.sh 中有打印內容。

我如何將其也通過管道傳輸到文本文件? (如果可能的話,還要打印)

如果要將輸出寫入文件,可以使用subprocess.callstdout參數。

它需要

  • None (默認情況下,stdout 繼承自父級(您的腳本))
  • subprocess.PIPE (允許您從一個命令/進程通過管道傳輸到另一個)
  • 文件對象或文件描述符(你想要的,將輸出寫入文件)

您需要打開一個類似open的文件,並將對象或文件描述符整數傳遞給call

f = open("blah.txt", "w")
subprocess.call(["/home/myuser/run.sh", "/tmp/ad_xml",  "/tmp/video_xml"], stdout=f)

我猜想任何有效的類文件對象都可以工作,比如套接字 (gasp:)),但我從未嘗試過。

正如marcog在評論中提到的,您可能還想重定向 stderr,您可以使用stderr=subprocess.STDOUT subprocess.STDOUT 將其重定向到與 stdout 相同的位置。 上述任何值都適用,您可以重定向到不同的地方。

popen的選項可以在call中使用

args, 
bufsize=0, 
executable=None, 
stdin=None, 
stdout=None, 
stderr=None, 
preexec_fn=None, 
close_fds=False, 
shell=False, 
cwd=None, 
env=None, 
universal_newlines=False, 
startupinfo=None, 
creationflags=0

所以...

myoutput = open('somefile.txt', 'w')
subprocess.call(["/home/myuser/run.sh", "/tmp/ad_xml",  "/tmp/video_xml"], stdout=myoutput)

然后你可以用myoutput做你想做的

此外,您可以像這樣做一些更接近管道輸出的事情。

dmesg | grep hda

將會:

p1 = Popen(["dmesg"], stdout=PIPE)
p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE)
output = p2.communicate()[0]

python 手冊頁上有很多有用的信息。

subprocess.call(["/home/myuser/run.sh", "/tmp/ad_xml",  "/tmp/video_xml"])

現在我有一個我運行的腳本。 當我運行它並到達這一行時,它開始打印內容,因為 run.sh 中有打印內容。

我如何將它也通過管道傳輸到文本文件? (如果可能,還可以打印)

暫無
暫無

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

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