【发布时间】:2016-11-02 13:42:36
【问题描述】:
我正在运行以下命令,使用 python 子进程从 rpm 中提取文件。
但是当 rpm 大小超过 25 - 30 MB 时,该命令会失败。使用Popen、call 尝试了命令,stdout 也作为PIPE 和os.system。当我直接在 shell 中运行此命令时,它运行良好。问题只是当我通过某种方式从 Python 调用它时
命令:
rpm2cpio <rpm_name>.rpm| cpio -idmv
我对进程 ID 进行了 strace,发现它总是挂在某个写入系统调用上
ps -ef | grep cpio
root 4699 4698 4 11:05 pts/0 00:00:00 rpm2cpio kernel-2.6.32-573.26.1.el6.x86_64.rpm
root 4700 4698 0 11:05 pts/0 00:00:00 cpio -idmv
strace -p 4699
Process 4699 attached
write(10, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0rc_pixelview_new"..., 8192
strace -p 4700
Process 4700 attached
write(2, "./lib/modules/2.6.32-573.26.1.el"..., 94
我有两个问题:
- 有人能找出问题所在吗?为什么 rpm 大小超过 25 MB 时会失败。
- 还有其他方法可以从 python 中提取 rpm 内容吗?
【问题讨论】:
-
请贴出你使用的python代码。您是否将标准输出重定向到 PIPE,然后按照以下答案之一的建议忘记读取管道?如果没有需要调试的代码,我们无法调试它。
标签: python process rpm strace cpio