2017-08-18 1 views
0

J'ai une commande commepython exécuter la commande plusieurs sous-processus

command = "su - user; cd $CONFIG; grep domain domains.xml" 

Et besoin d'exécuter les commandes les unes après les autres et capturer la sortie de grep.

def subprocess_cmd(command): 
     fnlogs("comand = " + command) 
     process = subprocess.Popen(command,stdout=subprocess.PIPE, shell=True) 
     proc_stdout = process.communicate()[0].strip() 
     fnlogs("proc_stdout = " +proc_stdout + "\n") 

subprocess_cmd('su - user; cd $CONFIG; grep domain domains.xml') 

Sortie dit grep: domains.xml: Aucun fichier ou répertoire, bien que le fichier existe son pas capable de le trouver.

+1

vous devriez vérifier la sortie de 'pwd' pour voir que votre sous-processus est dans le même répertoire. – silgon

+0

je fais un cd $ CONFIG qui a des domaines.xml – Sameer

Répondre

0

Il semble que vous ne transmettiez pas de valeur pour CONFIG.

Si vous connaissez la valeur prévue dans le script, vous pouvez faire

d = dict(os.environ) 
d["CONFIG"] = "/some/directory" 
process = subprocess.Popen(command,stdout=subprocess.PIPE, shell=True, env=d) 

Vous pouvez également appeler sudo avec -E pour préserver l'environnement que vous passez à la première externe shell (voir https://stackoverflow.com/a/8633575/693140). Sur une note plus générale, votre sous-commande ne semble pas faire quoi que ce soit que vous ne pourriez pas accomplir dans Python sans compter sur des commandes externes. Je recommanderais de reconsidérer complètement votre approche, et juste ouvrez le dossier et extrayez le texte respectif de la chaîne (par exemple en utilisant des expressions régulières).

+0

Quelle approche vous suggérez? les commandes seront stockées dans un fichier et ensuite exécutées? – Sameer

+0

Merci @Stefan j'ai réussi à obtenir est résolu en écrivant la sortie dans le fichier et diviser le résultat. – Sameer