2017-09-14 1 views
0

code:subprocess.Popen pour la sortie de la boucle

with open ('Client.txt','r') as Client_Name: 
    for Client in Client_Name: 
     out = subprocess.Popen(['script.sh', '-byclient', Client], stdout=subprocess.PIPE) 
     outputstring = out.communicate() 
     print (outputstring) 

Ce code ne donne pas la sortie, je veux passer les noms des clients dans Client.txt fichier à script.sh. Toutes les suggestions s'il vous plaît.

Répondre

0

Votre code pour transmettre le nom au script semble correct, mais communicate renvoie en réalité un tuple, (stdout_data, stderr_data).

Vous souhaitez probablement également transmettre universal_newlines=True à Popen pour décoder la sortie. Essayez ceci:

out = subprocess.Popen(['script.sh', '-byclient', Client], 
         stdout=subprocess.PIPE, 
         universal_newlines=True) 
out.wait() # wait until the script has finished 
stdout_data, stderr_data = out.communicate() 
print(stdout_data) 

Ou, si vous voulez imprimer la sortie en temps réel:

out = subprocess.Popen(['script.sh', '-byclient', Client], 
         stdout=subprocess.PIPE, 
         universal_newlines=True) 
for line in out.stdout: 
    print(line) 
+0

avec open ('client.txt', 'r') comme Client_Name: pour le client en Client_Name : Policy_Detail = subprocess.Popen ([ 'script.sh', '-byclient', client], stdout = subprocess.PIPE, universal_newlines = True) Policy_Detail.wait() stdout_data, stderr_data = Policy_Detail.communicate() print (stdout_data) –

+0

Une suggestion si je passe le nom du client en boucle? –