2016-03-17 4 views
0

Le code ci-dessous fonctionne lorsqu'il est tapé manuellement cependant lorsque je lance le programme.py rien ne s'imprime. Mon but ultime est de récupérer ces données à partir du PC de l'utilisateur pour créer un moyen facile de recréer des raccourcis .... Mes utilisateurs en quelque sorte à perdre lolPython Capture réponse de powershell

import smtplib, os, subprocess, sys 
from string import ascii_uppercase 
from cStringIO import StringIO 

data = os.popen(r"dir %userprofile%\desktop\*.lnk* /s/b").read() 
file = open("testitem.txt", "w") 
file.write(data) 
file.close() 


my_data = dict(zip(ascii_uppercase,open("testitem.txt"))) 


old_stdout = sys.stdout 
sys.stdout = mystdout = StringIO() 

for key, value in my_data.iteritems(): 
    subprocess.Popen([r"powershell.exe", "$sh = New-Object -COM WScript.Shell" + "\n" +  "$sh.CreateShortcut(\"%s\").TargetPath" % my_data[key].replace("\n", "")], stdout=subprocess.PIPE).communicate()[0] 


sys.stdout = old_stdout 

shared = mystdout.getvalue() 
print shared 
+0

Le code me semble correct ... Je pense que la raison pourrait être quelque part ailleurs. Vous pouvez essayer 'sys .__ stdout __. Write (partagé)' à la place de 'print shared' à la fin. –

+0

Merci pour la réponse. J'ai essayé cependant toujours de ne rien obtenir. Je pense que rien n'est capturé en premier lieu. C'est étrange mais après avoir essayé de nombreuses choses l'impression est vide, pas d'erreurs juste vides. –

Répondre

0

Essayez de supprimer cette ligne sys.stdout = old_stdout et ajouter stdout=sys.stdout à votre ligne principale de processus pour ex semblable. Popen(***,stdout=sys.stdout)