2016-11-16 33 views
0

我有下面的py脚本从artifactory下载文件。如何在基于配置文件中的变量的python脚本中调用另一个python脚本?

#!/usr/bin/python 
# -*- coding: utf-8 -*- 

import os 
import tarfile 
import urllib 
from urllib import urlretrieve 
import ConfigParser 

Config = ConfigParser.ConfigParser() 
Config.read('/vivek/release.conf') 
code_version = Config.get('main', 'app_version') 

os.chdir('/tmp/') 
arti_st_url='http://repo.com/artifactory/libs-release- local/com/name/tgz/abc.ear/{0}/abc.ear-{0}.tar.gz'.format(code_version) 
arti_st_name='abc.ear-{0}.tar.gz'.format(code_version) 
arti_sl_url='http://repo.com/artifactory/libs-release- local/com/name/tgz/def.ear/{0}/def.ear-{0}.tar.gz'.format(code_version) 
arti_sl_name='def.ear-{0}.tar.gz'.format(code_version) 
urllib.urlretrieve(arti_st_url, arti_st_name) 
urllib.urlretrieve(arti_sl_url, arti_sl_name) 
oneEAR = 'abc.ear-{0}.tar.gz'.format(code_version) 
twoEAR = 'def.ear-{0}.tar.gz'.format(code_version) 
tar = tarfile.open(oneEAR) 
tar.extractall() 
tar.close() 
tar1 = tarfile.open(twoEAR) 
tar1.extractall() 
tar1.close() 
os.remove(oneEAR) 
os.remove(twoEAR) 

这个脚本完美工作,感谢stackoverflow。

下面是下一个问题。 release.conf中有一个变量“protocol”。如果它等于“localcopy”,则有一个现有的py脚本可以执行某些操作。如果“协议”等于“artifactory”,则应调用并执行上面的脚本 。我怎样才能实现它?

注意:我是Python初学者,但我的任务不是。所以,请帮帮我。

回答

0

你可以简单地使用:

进口OS

使用os.system( “script_path”)

执行脚本文件。但是在脚本文件的最顶部应该有一行叫做shebang的行,你想执行。如果你的Python解释器会在/ usr/bin中/ Python的,这将是:

#在/ usr/bin中/ Python的

假设你是一个Linux用户。 在Windows中,shebang不受支持。它决定使用正在运行的* .py文件本身的程序。

//编辑: 要调用取决于属性配置值,你可以只让打了个比方runthis.py另一个脚本包含了像指令两个脚本:

protocol = Config.get('main', 'protocol') 
if protocol == 'localcopy': 
    os.system('path_to_localcopy_script) 
if protocol == 'antifactory': 
    os.system('path_to_other_script') 

不要忘了导入需要的模块在那个新的脚本。

然后,您只需运行您刚创建的脚本。

这是做到这一点的一种方法。

如果你不想创建其他脚本,然后把你在一个函数中写道,这样的代码:

def main(): 
    ... 
    Your code 
    ... 

并在您的脚本文件写的最底部:

if __name__ = '__main__': 
    protocol = Config.get('main', 'app_version') 
    if protocol == 'localcopy': 
    main() 
    if protocol == 'antifactory': 
    os.system('path_to_other_script') 

if __name__ = '__main__'只会在您自己运行该脚本时执行(例如,不能通过其他sctipt调用)

+0

感谢您的回复Ginko。但我的问题是基于配置文件中的变量,我应该在另一个py文件中调用上面给定的py文件。 – Vivek

+0

检查我是否帮助你完成了该编辑 – Ginko

相关问题