我要执行以下命令:
import subprocess
import os
JAVA_HOME = "export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64/"
HADOOP_HOME = "export HADOOP_HOME=/opt/hadoop-2.7.3"
os.system(JAVA_HOME)
os.system(HADOOP_HOME)
#proc1 = subprocess.run([self.JAVA_HOME])
#proc2 = subprocess.run([self.HADOOP_HOME])
如您所见,我已经尝试了使用subprocess和os.system()的两种方法,但似乎没有任何效果!我每次都会收到错误消息:
Cannot find hadoop installation: $HADOOP_HOME or $HADOOP_PREFIX must be set or hadoop must be in the path
我可能做错什么?
谢谢!
添加清晰图片的代码:
def execute(self):
self.username = "jdbc:hive2:sample1"
self.pswd = input("Enter password: ")
self.database = input("Enter database name: ")
self.table = input("Enter table name: ")
self.sqlQuery = "select * from " + self.database + "." + self.table + ";"
self.command = self.options + " -u \"" + self.username + "\" -p \"" + self.pswd + "\" -e \"" + self.sqlQuery + "\""
os.environ['JAVA_HOME'] = "/usr/lib/jvm/java-1.8.0-openjdk-amd64/"
os.environ['HADOOP_HOME'] = "/opt/hadoop-2.7.3"
proc = subprocess.Popen(self.command, stdout=subprocess.PIPE, shell=True)
我正在主程序中调用此函数来设置env变量,然后运行命令。
答案 0 :(得分:1)
您不能通过在 child 进程中设置环境变量来修改 current 进程的环境(这是您要尝试的操作)。当您使用TBitmap.BitmapScale
时,Python将派生一个新进程,然后使用您的Shell运行指定的命令。 Shell脚本完成后,该过程退出。您在该Shell进程中设置的所有环境变量都会在退出时消失。
如果要修改当前的流程环境,以便子级继承该环境,只需在os.system
变量中设置键:
os.environ