首页   注册   登录
 sunzy 最近的时间轴更新
sunzy

sunzy

V2EX 第 95651 号会员,加入于 2015-02-04 11:22:53 +08:00
使用 subprocess 执行另一个脚本,如何实时输出?
Python  •  sunzy  •  23 天前  •  最后回复来自 sunzy
30
绘画大师 APP,强制消费无法取消订阅?求助!
iPhone  •  sunzy  •  108 天前  •  最后回复来自 sunzy
7
12 年的 mac air 用来做 nas 是否可行?
NAS  •  sunzy  •  147 天前  •  最后回复来自 henryshen233
16
本地的 HTTPS 怎么使用 ngrok?
问与答  •  sunzy  •  243 天前  •  最后回复来自 sunzy007
1
你们的 lightsail 还能连上吗
Amazon Web Services  •  sunzy  •  2019-05-10 10:15:56 AM  •  最后回复来自 xyqhkr
31
[macbook 下开发] Filco Minila Air 如何改键比较合适?
MacBook  •  sunzy  •  2015-10-16 15:37:35 PM  •  最后回复来自 mongodb
3
sunzy 最近回复了
@lty1993 国内的呢?有推荐的吗?
@yyfeng88625 这个库不错,学习了,感谢!
@ipwx 赞!
@mathzhaoliang 这样写只能获取最后的信息吧
@ipwx 是的,是要监控进度输出,用.read(n)怎么读取正好一行的数据呢?
@ipwx "The trick is to add universal_newlines=True to the subprocess.Popen() call, because ffmpeg's output is in fact unbuffered but comes with newline-characters" ---stackoverflow
@ipwx 在 Mac 下开发,在 Linux 服务器上跑。 用 universal_newlines 这个参数是因为 ffmpeg 输出进度的时候用的是"\r"
@crella 多谢提醒!这个建议也很不错!
@ipwx 多谢!

找到了 universal_newlines 这个参数,可以完全满足我的需求!

r = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, env=env,universal_newlines=True)
while True:
line = r.stdout.readline()
if not line and r.poll() != None:
break
print(line.rstrip())

先不折腾 ffmpeg-python 库了(看了一下,还是要学习成本了),等这个忙完了再看吧
@ipwx 这个测试脚本跑通了,但是换成 ffpmeg 就不行了,汗~

```python
env = os.environ.copy()
env['PYTHONUNBUFFERED'] = '1'

r = subprocess.Popen("ffmpeg -i %s -f flv %s -hide_banner" % (source, target), shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=env)
while True:
line = r.stdout.readline()
line2 = r.stderr.readline()
if not line and not line2 and r.poll() != None:
break
print(line.rstrip())
print(line2.rstrip())
```
关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1516 人在线   最高记录 5168   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 21ms · UTC 23:20 · PVG 07:20 · LAX 16:20 · JFK 19:20
♥ Do have faith in what you're doing.