gpt4 book ai didi

Python:如何重定向此输出?

转载 作者:太空狗 更新时间:2023-10-29 19:34:57 26 4
gpt4 key购买 nike

我正在通过子进程调用 rtmpdump 并尝试将其输出重定向到一个文件。问题是我根本无法重定向它。

我首先尝试将 sys.stdout 设置为打开的文件。这适用于 ls,但不适用于 rtmpdump。我还尝试设置 sys.stderr 以确保它也不起作用。

然后我尝试使用带有命令行参数的“>> 文件”,但它似乎再次不起作用。

另外,出于某种原因,即使我使用 subprocess.call 而不是 subprocess.check_output,Eclipse 也会打印 rtmpdump 的输出,而无需调用 print 方法。这是黑魔法!

有什么建议吗?

编辑:这是一些示例代码。

    # /!\ note: need to use os.chdir first to get to the folder with rtmpdump!
command = './rtmpdump -r rtmp://oxy.videolectures.net/video/ -y 2007/pascal/bootcamp07_vilanova/keller_mikaela/bootcamp07_keller_bss_01 -a video -s http://media.videolectures.net/jw-player/player.swf -w ffa4f0c469cfbe1f449ec42462e8c3ba16600f5a4b311980bb626893ca81f388 -x 53910 -o test.flv'
split_command = shlex.split(command)
subprocess.call(split_command)

最佳答案

sys.stdout 是 python 对父级输出流的想法。

在任何情况下你都想改变 child 的输出流。

subprocess.call 和 subprocess.Popen 为输出流获取命名参数。

因此打开您要输出到的文件,然后将其作为适当的参数传递给子进程。

f = open("outputFile","wb")
subprocess.call(argsArray,stdout=f)

您关于使用 >>> 的说法表明您正在使用 shell=True,或者认为您正在将参数传递给 shell。在任何情况下,最好使用子进程的数组形式,这样可以避免不必要的进程和 shell 的任何怪异。

编辑:

所以我下载了 RTMPDump 并尝试了一下,看起来消息出现在 stderr 上。

因此对于以下程序,程序输出中没有任何内容,并且 rtmpdump 记录到 stderr.txt 文件中:

#!/usr/bin/env python

import os
import subprocess

RTMPDUMP="./rtmpdump"
assert os.path.isfile(RTMPDUMP)
command = [RTMPDUMP,'-r','rtmp://oxy.videolectures.net/video/',
'-y','2007/pascal/bootcamp07_vilanova/keller_mikaela/bootcamp07_keller_bss_01',
'-a','video','-s',
'http://media.videolectures.net/jw-player/player.swf',
'-w','ffa4f0c469cfbe1f449ec42462e8c3ba16600f5a4b311980bb626893ca81f388'
,'-x','53910','-o','test.flv']


stdout = open("stdout.txt","wb")
stderr = open("stderr.txt","wb")
subprocess.call(command,stdout=stdout,stderr=stderr)

关于Python:如何重定向此输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3982577/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com