TypeError:int()参数必须是字符串或数字,而不是' Popen'蟒蛇

时间:2015-07-23 15:57:08

标签: python popen

我使用Popen

这些行
numcpu = sub.Popen("($(cat /proc/cpuinfo | grep 'physical id' | awk '{print $NF}' | sort | uniq | wc -l))", shell=True, stdout=sub.PIPE, stderr=sub.PIPE)
numcores = sub.Popen("($(cat /proc/cpuinfo | grep 'cpu cores' | awk '{print $NF}' | sort | uniq | wc -l))", shell=True, stdout=sub.PIPE, stderr=sub.PIPE)  
numsibling = sub.Popen("($(cat /proc/cpuinfo | grep 'siblings' | awk '{print $NF}' | sort | uniq | wc -l))", shell=True, stdout=sub.PIPE, stderr=sub.PIPE)

但遇到此追溯错误

Traceback (most recent call last):
File "./cputool", line 53, in <module>
CpuTool()
File "./cputool", line 45, in CpuTool
numthreads = int(numsibling)/int(numcores)
TypeError: int() argument must be a string or a number, not 'Popen'

在这一行

numthreads = int(numsibling)/int(numcores)

我对脚本的新手无论如何都要将这些Popen值分配给字符串或int,这样可行吗?我不认为做一个简单的numcpu ==&#39;任何事情&#39;工作,但我可能是错的?对初学者有什么帮助吗?对于类似的案例,我在这里找不到任何东西(SO),不幸的是,我的案子也在工作。谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用proc_name.stdout.readline()阅读标准输出,然后将其转换为int

numthreads = int(numsibling.stdout.readline())/int(numcores.stdout.readline())