2016-11-16 2 views
0

J'ai ci-dessous le script py pour télécharger les fichiers de artifactory.Comment puis-je appeler un autre script python, dans un script python, basé sur une variable dans un fichier de configuration?

#!/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) 

Ce script fonctionne parfaitement, grâce à stackoverflow.

Voici la question suivante. Il y a un "protocole" variable dans release.conf. Si c'est égal à "localcopy", il y a un script py existant qui fait quelque chose. Si le "protocole" est égal à "artificiel", le script ci-dessus doit être appelé et exécuté. Comment puis-je y arriver?

Note: Je suis un débutant en Python, mais mes tâches ne sont pas. Alors, aidez-moi s'il vous plaît les gars.

Répondre

0

Vous pouvez simplement utiliser:

import os

os.system ("script_path")

pour exécuter le fichier de script. Mais il devrait y avoir une ligne appelée shebang dans le haut de ce fichier de script, que vous voulez exécuter. Si votre interpréteur Python serait dans/usr/bin/python ce serait:

#/usr/bin/python

En supposant que vous êtes un utilisateur de Linux. Dans Windows, shebang n'est pas pris en charge. Il détermine quel programme utiliser le fichier * .py lui-même.

// Edit: Pour appeler que deux scripts en fonction d'une valeur de configuration de propriété, vous pouvez simplement faire un autre script appelé par exemple runthis.py qui contient des instructions comme:

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

Ne pas importer oublièrent modules nécessaires dans ce nouveau script.

Ensuite, vous lancez simplement le script que vous venez de faire.

C'est une façon de le faire.

Si vous ne voulez pas de créer un script supplémentaire, puis mettre ce code que vous avez écrit dans une fonction, comme:

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

Et sur le fond de votre fichier script écriture:

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__' s'exécuterait seulement si vous exécutez ce script par vous-même (pas par l'appel d'un autre sctipt par exemple)

+0

Merci pour votre réponse Ginko. Mais ma question est basée sur une variable dans le fichier de configuration, je devrais appeler au-dessus du fichier py donné dans un autre fichier py. – Vivek

+0

Vérifiez si je vous ai aidé avec cette modification – Ginko