[英]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.call
的stdout參數。
它需要
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.