V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  ipwx  ›  全部回复第 92 页 / 共 195 页
回复总数  3888
1 ... 88  89  90  91  92  93  94  95  96  97 ... 195  
2020-04-23 20:47:30 +08:00
回复了 sunzy 创建的主题 Python 使用 subprocess 执行另一个脚本,如何实时输出?
就是用个缓冲区自己解析一下。上面是伪代码,不是真的能运行的代码。
2020-04-23 20:46:52 +08:00
回复了 sunzy 创建的主题 Python 使用 subprocess 执行另一个脚本,如何实时输出?
@sunzy 基本思路:

buf = b''

def handle(cnt):
....buf += cnt
....while True:
........pos = buf.find(b'\n‘)
........if pos <= -1:
............break
........handle_line(buf[:pos])
........buf = buf[pos:]

def handle_line(line):
....do what you want to do

while not eof:
....handle(read(n))
if buf:
....handle_line(buf)
2020-04-23 14:48:29 +08:00
回复了 sunzy 创建的主题 Python 使用 subprocess 执行另一个脚本,如何实时输出?
我知道了你是不是要处理 ffmpeg 的进度输出。那个没换行,所以要么是 \b 退格,要么是 \r 回到行首。所以没有 \n 你之前用 readline 搞不定很正常。像我一般用 .read 手动处理界定符,真注意不到这个。
2020-04-23 14:45:36 +08:00
回复了 sunzy 创建的主题 Python 使用 subprocess 执行另一个脚本,如何实时输出?
@sunzy 嘛嘛。我一般用 .read(n) 直接 stdout.buffer.write 这种,Popen 我还真没用过 readline
2020-04-23 14:39:30 +08:00
回复了 sunzy 创建的主题 Python 使用 subprocess 执行另一个脚本,如何实时输出?
@sunzy 嗷原来你是 windows 啊。我一直在 linux 和 mac 下做,而且从来没用过 readlines,这倒是没注意到。
你可以不用这些框架,但是用了以后,你会感觉,“真香”
2020-04-23 13:45:30 +08:00
回复了 clockOS 创建的主题 健康 没有听说过《植物神经紊乱》的一定要了解一下
得过,焦虑症的原因。养了半年好了。
2020-04-23 13:42:30 +08:00
回复了 sunzy 创建的主题 Python 使用 subprocess 执行另一个脚本,如何实时输出?
另外 ffmpeg 的话,你可以考虑用库,比如:

https://github.com/kkroening/ffmpeg-python
2020-04-23 13:40:54 +08:00
回复了 sunzy 创建的主题 Python 使用 subprocess 执行另一个脚本,如何实时输出?
@sunzy 所以用 subprocess.Popen(..., stdout=subprocess.PIPE, stderr=subprocess.STDOUT) 最最方便的选择。
2020-04-23 13:40:17 +08:00
回复了 sunzy 创建的主题 Python 使用 subprocess 执行另一个脚本,如何实时输出?
@sunzy stderr=subprocess.STDOUT

你这最大的问题就是这两句:

line = r.stdout.readline()
line2 = r.stderr.readline()

想象一下,如果被调用的程序只通过一个 stdout 输出,那么你在第二行就会一直 hang,直到程序退出。反过来,如果被调用的程序只通过 stderr 输出,那你的程序就会在第一行 hang,直到程序退出。所以无论什么时候,这两行这么写都是不对的。除非你开两个线程后台读取。
2020-04-23 10:54:33 +08:00
回复了 sunzy 创建的主题 Python 使用 subprocess 执行另一个脚本,如何实时输出?
PYTHONUNBUFFERED=1 这个环境变量能关掉这个机制。
2020-04-23 10:54:16 +08:00
回复了 sunzy 创建的主题 Python 使用 subprocess 执行另一个脚本,如何实时输出?
@sunzy 没啥特别的,Python 有个机制,检测输出设备是啥。如果不是交互式的 terminal,那么就会自动打开 python 自己的输出缓存。这和你调用 python 脚本的输入缓存无关,人家没有把数据推过来,你的调用者怎么做也是枉然。
2020-04-23 10:21:34 +08:00
回复了 sunzy 创建的主题 Python 使用 subprocess 执行另一个脚本,如何实时输出?
emmmm 重点是 env=env

另外如果是我的话,不会使用 shell=True,也不会设置 bufsize 。我的话会这样:

env = os.environ.copy()
env['PYTHONUNBUFFERED'] = '1'
subprocess.Popen([sys.executable, ...], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, env=env)
2020-04-23 10:19:56 +08:00
回复了 sunzy 创建的主题 Python 使用 subprocess 执行另一个脚本,如何实时输出?
env = os.environ.copy()
env['PYTHONUNBUFFERED'] = '1'
subprocess.Popen("python3 ./test1.py", shell=True, bufsize=1, stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=env)
2020-04-22 11:26:38 +08:00
回复了 sichuyoudang312 创建的主题 Python 关于 Python 后端验证参数 的界限
FastApi,你值得拥有
@FaiChou 比如上面提到的,离家还有一段距离打开空调,或者离家一段距离打开安防。这些功能确实需要知道你每个时刻的位置。你是不是每天都下班都能记得把应用给打开呢?安装师傅只是给最普通小白用户的通用建议而已。你要是懂,可以自己去改设置,并记得打开应用啊。
我记得智能家居的一个功能难道不是当你接近家(还没到家),就开始打开空调预热什么的么?还有其他类似功能大概或多或少也需要知道你的位置。不给定位权限怎么用这些功能?安装师傅的建议肯定是针对大众的,普通用户可能连什么是定位权限都不知道,当然遇到一个安装智能家居的用户,就提前让它设成总是允许呗。不然用户发现功能不能用,还要费老大劲儿上门服务。

换个角度,如果你用苹果手机,苹果的智能家居,是不是不需要同意什么权限,它自然就把数据给智能家居网关了?如果用小米手机,用小米的智能家居,是不是也是如此?只不过你用了苹果手机+小米智能家居,才注意到这一点而已。
- - - -

结论就是,这是用智能家居的必然操作。也别一惊一乍觉得别人图你的定位,小米和苹果还不一定看得上。还是你是通缉犯么。如果你实在在意这个,就一开始不要用智能家居。
2020-04-21 21:37:14 +08:00
回复了 keroppi 创建的主题 Docker 一个 dockerfile 构建两个语言
FROM xxx

RUN apt-get update && apt install python

搞定
2020-04-21 09:30:12 +08:00
回复了 rpish 创建的主题 黑魔法 WSL1 根本不是什么黑魔法 而是抄袭 Docker 而已吧
@rpish Docker 没有模拟另一个系统。Docker 用的是 Linux 内核的环境隔离功能,本身是内核功能的一部分。

如果这还不够,那么想一下:用 WSL1 模拟 Linux,WSL1 要把所有 Linux 的 API 通过 Windows 系统重写一遍,还要想办法欺骗所有 Linux 程序,让它们以为它们运行在 Linux 下,难度可想而知。但是 Docker 使用 Linux 的内核隔离,没有重写任何 API,就是调用了内核原有的功能,包装了一下而已。
1 ... 88  89  90  91  92  93  94  95  96  97 ... 195  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2913 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 35ms · UTC 12:36 · PVG 20:36 · LAX 05:36 · JFK 08:36
Developed with CodeLauncher
♥ Do have faith in what you're doing.