关于 Python 的 popen 无法获取 pipe 的输出,大家有什么头猪吗

2021-12-11 19:26:17 +08:00
 LeeReamond

使用 proc = popen("command")之后,使用 proc.stdout 获得标准输出流

但是经过测试发现如果 command 里面是比较简单的命令,比如 ping baidu.com 这种那程序就能正常运行,如果是包含有 A 程序 pipe 到 B 的命令,比如 ffmpeg pipe 到 x264.exe 输出就完全无法拿到。请问各位大佬这是咋回事

2829 次点击
所在节点    Python
26 条回复
LeeReamond
2021-12-13 00:22:21 +08:00
@vanton 我正经 win10 系统,正经 python3.8 ,能有啥问题?而且我这里 ps 没有 grep
vanton
2021-12-13 01:33:21 +08:00
@LeeReamond #21

`pwsh -version`

看下版本号,版本过低就会这样。现在 pwsh 版本是 7.2 。

`ping baidu.com | findstr 'TTL'`

确实版本太低又懒得升级,你跑下这个,就算预览版 pwsh 也能跑起来。

要是还是跑不起来,就找个朋友换台机器试下。

另外,`python --version` 也看下。
LeeReamond
2021-12-13 03:27:35 +08:00
@vanton 我的 powershell 没有 pwsh 命令,我的系统是 win10 21H2 企业版,这应该不是一个年久失修的系统。findstr 是有的,但是观察这个 pipe 似乎是要 ping 全部执行完才会推给 findstr ,而不是像 grep 一样一 ping 一打印
vanton
2021-12-13 09:37:49 +08:00
@LeeReamond #23

没有 pwsh 的话那应该是安装了最早版本的 powershell 。
可以去 Microsoft store 装个新版的试下。
https://www.microsoft.com/zh-cn/p/powershell/9mz1snwt0n5d?activetab=pivot:overviewtab

Windows 用得不多,平时基本都是 mac 或者 linux 。
如果还不行,无能为力。
2i2Re2PLMaDnghL
2021-12-13 10:04:25 +08:00
@vanton windows 你又 shell=True 又在谈 powershell 怎样怎样是不是有点毛病?
要么别改 ComSpec ,要么别依赖 ComSpec 。
Latin
2021-12-13 11:24:25 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/821556

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX