我有下面的py脚本从artifactory下载文件。
#!/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中。如果它等于" localcopy",那么现有的py脚本可以执行某些操作。如果"协议"等于" artifactory", 上面的脚本应该被调用并执行。我怎样才能实现它?
注意:我是Python的初学者,但我的任务不是。所以,请帮帮我们。
答案 0 :(得分: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调用)