您的位置:首页 > 大数据 > 云计算

云计算项目中遇到erlang的几个小问题

2017-04-10 10:38 288 查看
下面的几个小问题是今年暑假在做项目的时候遇到的,当时也花了不少的时间去把这些问题搞清了,现在有些遗忘,把那几个问题重新翻出来,和大家一起分享一下。

经过这几天的努力,可能有那么一小点的收获,但是和实际要求可能查得还远些。下面是昨天我遇到的问题的解决,这三个问题花费的时间比较多些。
问题1总结:在源代码中是D = os:cmd("get_node_resource.sh") -- "\n"但是在我的机子上是用问题的,但在我们测试的虚拟机上是正确的,后来我改成了这样:D = os:cmd("bash /home/sunny/ECP/NodeController/priv/script/get_node_resource.sh") -- "    \n\r",在不同机子上的结果是不一样的,是版本问题,还是?\n\r 的问题。还有:D = os:cmd("bash /home/sunny/ECP/NodeController/priv/script/create_vm.sh") -- "\n\r",

问题2总结:在create_vm_cmd.erl中的check_parm(Content)-> ture.这里的返回结果是有问题的,不是ture,而是true.是true......单词写错了,这个问题我花了一晚上时间找出来了,我的速度太慢了,唉。
这些细节上,我的速度有些慢。
问题3总结:关于列表和元组的区别。这个问题也比较纠结些,对于Resource,我发现代码中有的地方用的是列表,有的地方用的是元组,所以这个是有问题的,这个问题上我花费的时间也比较多些。而且特别注意一下这个东西: D = os:cmd("bash /home/sunny/ECP/NodeController/priv/script/get_node_resource.sh") -- "\n\r", case io_lib:fread("~s~s~d~d~d~d~d", D) of  {ok,[ParseRes],_} -> {ok,ParseRes};这里的[ParseRes]中,不能加列表。原因是列表的个数都是固定的,所以这样是不行的。后来,我改成了这样: D = os:cmd("bash /home/sunny/ECP/NodeController/priv/script/get_node_resource.sh") -- "\n\r", case io_lib:fread("~s~s~d~d~d~d~d", D) of  {ok,ParseRes,_} -> [HostName,IpAddr,VcpuCount,StorageSize,MemorySize,FreeStorageSize,FreeMemorySize] = ParseRes, Resource = {HostName,IpAddr,VcpuCount,StorageSize,MemorySize,FreeStorageSize,FreeMemorySize}, {ok,Resource};这样来做的话,也有些问题,那就是如果参数发生变化的话,就要修改。但是我也没有想到什么其他解决方法。
问题4总结:% Params = integer_to_list(VcpuCount) ++ " " ++% integer_to_list(MemSize) ++ " " ++% integer_to_list(DiskSize) ++ " " ++% IpAddr ++ " " ++% MacAddr ++ " " ++% integer_to_list(VncPort) ++ " " ++% integer_to_list(VmId),% io:format("Params  ~p ~n", [Params]),这里要注意:++和--是用在列表的操作,其他的使用不了,所以这里是有问题的。这里我改成了:Params = lists:concat([integer_to_list(VcpuCount)," ", integer_to_list(MemSize), " ", integer_to_list(DiskSize)," ", IpAddr," ", MacAddr," ", VncPass," ", integer_to_list(VncPort)," ", VmUser," ", VmUserPass," ", integer_to_list(VmId)]), D = os:cmd("create_vm.sh" ++ " " ++ Params),但是在os:cmd中++又一次可以使用了,我不清楚这个是为什么?

问题5总结:关于erlang与shell交互,我原先以为通过接口那种形式进行交互,没有想到有现成的os:cmd可以调用,这样的话,erlang与shell交互就方便许多了,也就不需要原先那种比较复杂的程序了,呵呵~~

这个是对问题4的补充:在os:cmd()中++仍然是不能使用的,不同的版本可能结果会有写区别,但我觉得那只是巧合,昨天晚上在我的机子上运行正确的那个命令,今天在实验室机子上就出现问题了,应该这样改:Params = lists:concat([“bash create_vm.sh ”                                                                        integer_to_list(VcpuCount)," ", integer_to_list(MemSize), " ", integer_to_list(DiskSize)," ", IpAddr," ", MacAddr," ", VncPass," ", integer_to_list(VncPort)," ", VmUser," ", VmUserPass," ", integer_to_list(VmId)]), D = os:cmd(Params),


<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>

阅读(818) | 评论(0) | 转发(0) |

0
上一篇:内核模块编程——打印一个进程的vm_area_struct

下一篇:erlang源程序文件的注释

相关热门文章
python 自动化测试平台 Robot ...

python 自动化测试平台 Robot ...

python snmp 自动化2-在python...

自动化测试详细测试计划 模板...

python snmp 自动化3-修改pyth...

linux dhcp peizhi roc

关于Unix文件的软链接

求教这个命令什么意思,我是新...

sed -e "/grep/d" 是什么意思...

谁能够帮我解决LINUX 2.6 10...

给主人留下些什么吧!~~

评论热议
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: