我使用以下命令从Perl库中检索一些数据
print Dumper($each_host->hardware->cpuInfo)."\n\n";我得到的回报是。
$VAR1 = bless( {
'hz' => '2199999664',
'numCpuCores' => '20',
'numCpuPackages' => '2',
'numCpuThreads' => '40'
}, 'HostCpuInfo' );我不知道该如何处理这件事,也不知道什么是福气。我的目标只是访问调用Perl VMware SDK返回的散列的原始值。
它来自于VMware perl SDK。
my $host_view = Vim::find_entity_views(view_type=>'HostSystem',properties=>['name','config','hardware'],begin_entity=>$each_dc);
foreach my $each_host(@$host_view){
print "\n\t".$each_host->name."\n";
print Dumper($each_host->hardware->cpuInfo)."\n\n";当我做Data::Printer时
HostCpuInfo {
Parents DynamicData
public methods (1) : get_property_list
private methods (0)
internals: {
hz 2199999664,
numCpuCores 20,
numCpuPackages 2,
numCpuThreads 40
}
}所以我把代码改成:
print Dumper($each_host->hardware->cpuInfo->numCpuPackages)."\n\n";
my $array1 = $each_host->hardware->cpuInfo->get_property_list;
print 'return'.$array1."\n\n";
print Dumper($each_host->hardware->cpuInfo->get_property_list);然后它会返回
$VAR1 = '2';
return4
$VAR1 = [
'dynamicType',
undef,
undef,
0
];
$VAR2 = [
'dynamicProperty',
'DynamicProperty',
1,
0
];
$VAR3 = [
'numCpuPackages',
undef,
undef,
1
];
$VAR4 = [
'numCpuCores',
undef,
undef,
1
];
$VAR5 = [
'numCpuThreads',
undef,
undef,
1
];
$VAR6 = [
'hz',
undef,
undef,
1
];谢谢
发布于 2016-06-04 18:54:50
您需要阅读的文档是。您需要单击"Downloads“下的Documentation按钮才能访问该网页,或者您也可以将信息下载到您自己的系统上供本地使用
如果您转到该页面并在contents部分查找"Writing Perl SDK for vSphere Scripts",您将看到一个无用的标记为"Working with“的页面。这将通向这个页面
与您的问题相关的重要信息如下
要从视图访问简单属性,请在视图对象上调用该属性的访问器。访问器与属性本身具有相同的名称,如下所示:
$view_name->property_name
看起来您的$each_host是一个HostSystem类型的对象,它有一个类型为HostHardwareInfo的属性hardware,而它又有一个类型为HostCpuInfo的属性cpuInfo。最后一个是您在问题开始时使用Dumper转储的对象
如果您阅读了HostCpuInfo对象的文档,您将看到它们有四个属性:hz、numCpuCores、numCpuPackages和numCpuThreads
您应该能够编写这样的代码来访问所有四个值:
my $cpuinfo = $each_host->hardware->cpuInfo;
for my $property ( qw/ hz numCpuCores numCpuPackages numCpuThreads / ) {
printf "%s = %d\n", $property, $cpuinfo->$property;
}或者像这样单独地
printf "hz = %d\n", $cpuinfo->hz;
printf "numCpuCores = %d\n", $cpuinfo->numCpuCores;
printf "numCpuPackages = %d\n", $cpuinfo->numCpuPackages;
printf "numCpuThreads = %d\n", $cpuinfo->numCpuThreads;请注意,这是访问对象属性的正确方法,并使用文档中的信息。它不依赖于使用Data::Dumper或类似工具收集的任何信息
我建议您花一些时间阅读文档并熟悉API。看起来所有的事实都在某处
https://stackoverflow.com/questions/37623591
复制相似问题