Python 未在浏览器中执行

Python not executing in browser

我有一个 cgi 脚本,它从不同的 python 文件导入函数。我正在使用这些文件来设置 Hadoop 集群。所以它主要有 commands.getstatusoutput 代码。 cgi文件只是在传递参数的同时调用这些函数。

但它不执行功能。当我通过终端 运行 它时,这工作正常。如果对此有任何帮助,我将不胜感激。

cgi文件:

#!/usr/bin/python

import cgi
import cgitb
import os
import commands
import base2
cgitb.enable()

print "content-type:text/html"
print ""

dn_iplist=[]

base2.ipscanner();
base2.freemem();
base2.procno();
base2.freehd();

dn_iplist = sorted(base2.spacedict, key=lambda x: float(base2.spacedict[x][:-1]), reverse=True)[:2]

masterdict = base2.memdict.copy()

for key in dn_iplist:
    if key in masterdict:   
        del masterdict[key]

#print masterdict

#####################Resource Manager IP
rmip = max(masterdict, key=lambda key: int(masterdict[key]))
del masterdict [rmip]
#####################Namenode IP
nnip = max(masterdict, key=lambda key: int(masterdict[key]))
del masterdict[nnip]
#####################Client IP
cip = max(masterdict, key=lambda key: int(masterdict[key]))

print """
<html>
<head>
    <title>Hadoop Cluster Services - Create and Manage your Hadoop clusters</title>
    <link rel="stylesheet" type="text/css" href="/css/style1.css">
</head>

<body>
        <br><b>
        <div class="drop">
        <ul class="drop_menu">
            <li><a href="home.html">HOME</a></li>
            <li><a href="create.cgi">CLUSTER</a>
                <ul>
                    <li><a href="/loader.html">Create Cluster</a></li>
                    <li><a href="#">Manage Cluster</a></li> 
                </ul>
            </li>
            <li><a href="#">SERVICES</a>
                <ul>
                    <li><a href="#">Shell</a></li>
                    <li><a href="#">Create Cluster</a></li> 
                    <li><a href="#">System Admin</a></li>   
                </ul>
            </li>
        </ul>   
        </div>

    <br><br><br><br><br>
    <div id="autoips">
        Resource Manager IP: """ 
print rmip
print "<br><br>Namenode IP: "
nport = "9001"
print nnip + ":" + nport 
print "<br><br>Client IP: "
print cip
print "<br><br>Datanodes/NodeManagers: "
for k in dn_iplist:
    print k + ","
print """<br><br><input type="submit" value="Accept"> """

print "<br><br><br> BUILDING CLUSTER"

print"""        

    </div>

</body>

</html>
"""

base2.make_rm(rmip,nnip,nport)
print "<br>"
base2.make_nn(nnip,nport)
print "<br>"
base2.make_client(nnip,nport,rmip,cip)
print "<br>"
for dnip in dn_iplist:
    print dnip  
    base2.make_dnnm(nnip,nport,rmip,dnip)
    print "<br>"

py文件的一部分:

#resourcemanager creation

def make_rm(rmip,nip,nport):
    fp = open("temp1.txt",mode="w")
    fp.write('<?xml version="1.0"?>\n<!-- Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.See the License for the specific language governing permissions and limitations under the License. See accompanying LICENSE file.-->\n\n<configuration>\n\n<!-- Site specific YARN configuration properties -->\n\n<property>\n<name>yarn.resourcemanager.resource-tracker.address</name>\n<value>'+rmip+':8025</value>\n</property>\n\n<property>\n<name>yarn.resourcemanager.scheduler.address</name>\n<value>'+rmip+':8030</value>\n</property>\n\n</configuration>')
    fp.close()
    commands.getstatusoutput("sshpass -p redhat scp temp1.txt "+rmip+":/hadoop2/etc/hadoop/yarn-site.xml")

    fp = open("temp2.txt",mode="w")
    fp.write('<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="configuration.xsl"?>\n<!--  Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.See the License for the specific language governing permissions and limitations under the License. See accompanying LICENSE file.-->\n\n<!-- Put site-specific property overrides in this file. -->\n\n <configuration>\n\n<property>\n <name>fs.default.name</name>\n<value>'+nip+':' +nport+ '</value>\n</property>\n</configuration>\n')
    fp.close()
    commands.getstatusoutput("sshpass -p redhat scp temp2.txt "+rmip+":/hadoop2/etc/hadoop/core-site.xml")
    # print("Resourcemanager setup.\n")

    commands.getstatusoutput("sshpass -p redhat ssh -o StrictHostKeyChecking=no root@"+rmip+" yarn-daemon.sh start resourcemanager")

    a = commands.getstatusoutput("sshpass -p redhat ssh -o StrictHostKeyChecking=no root@"+rmip+" /usr/java/jdk1.7.0_79/bin/jps | grep 'ResourceManager' | awk '{print }'")

    if a[1] == "ResourceManager":
        print("ResourceManager setup complete!")

这是我得到的结果。它显示安装完成。但什么也没做。但它通过终端完美执行。

应该有一个类似的Datanode设置完成!在底部的 192.168.100.107 IP 旁边。 此代码不会将临时文件复制到其他 VM。

编辑:它可能与 commands.getstatusoutput 命令有关吗? 为什么它只影响 scp

终于修好了。我不得不在 scp 命令中添加一个 root@ipaddress

来自

commands.getstatusoutput("sshpass -p redhat scp temp1.txt "+rmip+":/hadoop2/etc/hadoop/core-site.xml")

commands.getstatusoutput("sshpass -p redhat scp temp1.txt root@"+rmip+":/hadoop2/etc/hadoop/core-site.xml")

必须对所有 ssh/scp 命令进行此更改。 否则,httpd 会尝试使用没有 root 权限的 "apache" 用户进行 ssh。这就是代码在浏览器中失败的原因。