从python3代码执行ubuntu sys命令时出错

时间:2018-06-21 19:49:34

标签: shell command-line ubuntu-16.04 python-3.6

我要执行以下命令:

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变量,然后运行命令。

1 个答案:

答案 0 :(得分:1)

您不能通过在 child 进程中设置环境变量来修改 current 进程的环境(这是您要尝试的操作)。当您使用TBitmap.BitmapScale时,Python将派生一个新进程,然后使用您的Shell运行指定的命令。 Shell脚本完成后,该过程退出。您在该Shell进程中设置的所有环境变量都会在退出时消失。

如果要修改当前的流程环境,以便子级继承该环境,只需在os.system变量中设置键:

os.environ