如何基于配置文件中的变量在python脚本中调用另一个python脚本?

时间:2016-11-16 20:47:40

标签: python config python-2.6

我有下面的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的初学者,但我的任务不是。所以,请帮帮我们。

1 个答案:

答案 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调用)