要从我的Python脚本启动程序,我使用以下方法:
def execute(command):
process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
output = process.communicate()[0]
exitCode = process.returncode
if (exitCode == 0):
return output
else:
raise ProcessException(command, exitCode, output)
Run Code Online (Sandbox Code Playgroud)
因此,当我启动一个类似的过程时Process.execute("mvn clean install"),我的程序会一直等到过程结束,然后我才能获得程序的完整输出.如果我正在运行需要一段时间才能完成的过程,这很烦人.
我可以让我的程序逐行写入进程输出,通过在循环结束之前轮询进程输出或其他内容吗?
**[编辑]抱歉,在发布此问题之前我没有很好地搜索.线程实际上是关键.在这里找到一个示例,说明如何执行此操作:** 来自线程的Python Subprocess.Popen
我想访问shell命令的结果:
youtube-dl -g "www.youtube.com..."
Run Code Online (Sandbox Code Playgroud)
将其输出打印direct url到文件; 从python程序中:
import youtube-dl
fromurl="www.youtube.com ...."
geturl=youtube-dl.magiclyextracturlfromurl(fromurl)
Run Code Online (Sandbox Code Playgroud)
那可能吗 ?我试图了解源的机制,但迷路了:youtube_dl/__init__.py,youtube_dl/youtube_DL.py,info_extractors...
from yt_dlp import YoutubeDL
with YoutubeDL() as ydl:
ydl.download('https://youtu.be/0KFSuoHEYm0')
Run Code Online (Sandbox Code Playgroud)
这是产生输出的相关代码位。
我想做的是从下面的输出中获取倒数第二行,指定视频标题。
我尝试过一些变体
output = subprocess.getoutput(ydl)
Run Code Online (Sandbox Code Playgroud)
也
output = subprocess.Popen( ydl, stdout=subprocess.PIPE ).communicate()[0]
Run Code Online (Sandbox Code Playgroud)
我试图捕获的输出是这里的倒数第二行:
from yt_dlp import YoutubeDL
with YoutubeDL() as ydl:
ydl.download('https://youtu.be/0KFSuoHEYm0')
Run Code Online (Sandbox Code Playgroud)
yt-dlp 上还有关于如何从元数据中提取标题或将其包含在 YoutubeDL() 后面的括号中的文档,但我不太明白。
这是我用 python 制作的第一个项目的一部分。我缺少对许多概念的理解,任何帮助将不胜感激。