1
我想通過一個python腳本使用從XML文件中獲得的變量。一旦獲得變量,我想將這些傳遞給由shell腳本運行的命令。需要對此傳遞從python腳本成員/變量的shell腳本或命令
我的Python腳本幫助是像下面
#!/usr/bin/python
import os
import xml.etree.ElementTree as etree
from hive import ThriftHive
filename = "mood_ib_history_parameters_DEV.xml"
__currentlocation__ = os.getcwd()
__fullpath__ = os.path.join(__currentlocation__,filename)
tree = etree.parse(__fullpath__)
root = tree.getroot()
hive_db = root.find("hive_db").text
EDGE_HIVE_CONN = root.find("EDGE_HIVE_CONN").text
target_dir = root.find("target_dir").text
to_email_alias = root.find("to_email_alias").text
to_email_cc = root.find("to_email_cc").text
from_email_alias = root.find("from_email_alias").text
dburl = root.find("dburl").text
SQOOP_EDGE_CONN = root.find("SQOOP_EDGE_CONN").text
user_name = root.find("user_name").text
password = root.find("password").text
IB_log_table = root.find("IB_log_table").text
SR_DG_master_table = root.find("SR_DG_master_table").text
SR_DG_table = root.find("SR_DG_table").text
print hive_db
print EDGE_HIVE_CONN
print target_dir
print to_email_alias
print to_email_cc
print from_email_alias
print dburl
print SQOOP_EDGE_CONN
print user_name
print password
print IB_log_table
print SR_DG_master_table
print SR_DG_table
的變量將是
- hive_db
- EDGE_HIVE_CONN
- TARGET_DIR
- to_email_alias
- to_ email_cc
- from_email_alias
- dburl
- SQOOP_EDGE_CONN
- USER_NAME
- 密碼
- IB_log_table
- SR_DG_master_table
- SR_DG_table
其中將要被運行的外殼命令在shell腳本如下
ssh -i /apps/phodisvc/.ssh/id_rsa_edge_node ${SQOOP_EDGE_CONN} "sqoop import -D mapred.child.java.opts='\-Djava.security.egd=file:/dev/../dev/urandom' --connect '${dburl}' --username ${user_name} --password ${password} --query \"select CONTRACT_ID,CONTRACT_NUMBER,CONTRACT_STS_CODE,CONTRACT_STATUS,SERVICE_LINE_ID from XXCCS where \\\$CONDITIONS \" --split-by CONTRACT_NUMBER -m 4 --null-string '\\\\N' --null-non-string '\\\\N' --hive-delims-replacement '<EOL>' --boundary-query 'select (select min(CONTRACT_NUMBER) from XXCCS_DS_SAHDR_CORE) as minid ,(select max(CONTRACT_NUMBER) from XXCCS_DS_SAHDR_CORE) as maxid from dual' --target-dir ${target_dir}/XXCCS_DS_SAHDR_CORE --hive-import --hive-overwrite --hive-table ${hive_db}.XXCCS --map-column-hive CONTRACT_ID=BIGINT,SERVICE_LINE_ID=BIGINT"
我不希望使用()調用或子()方法withing的第一個腳本,因爲我想將工作分成模塊。需要幫忙。
無論意味着你用它來執行shell命令,所有的變量必須是可用的代碼一起在這一點上。因此,即使將任務分成子例程,也可以從中返回變量。但是,如果變量在代碼中某處不是全部已知的,那麼就沒有辦法用這些變量調用shell函數。 (你的代碼無法告訴shell代碼本身不知道什麼) – VBB
你好@VBB變量總是來自第一個腳本,第二個腳本只有在成功執行第二個腳本後纔會執行。 – dataEnthusiast