2016-03-17 4 views
0

Приведенный ниже код работает при вводе вручную, однако, когда я запускаю program.py, ничего не печатает. Моя конечная цель состоит в том, чтобы получить эти данные от пользователя ПК, чтобы создать простой способ воссоздать ярлыки .... Мои пользователи как-то потерять их лолPython Захват ответа от 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

Код выглядит правильным для меня ... Я думаю, что причина может быть где-то в другом месте. Вы можете попробовать 'sys .__ stdout __. Write (shared)' вместо 'print shared' в конце. –

+0

Спасибо за ответ. Я все же пытался ничего не получить. Я думаю, что ничто не захватывается в первую очередь. Странно, но, попробовав множество вещей, печать пуста, ошибки не пустые. –

ответ

0

попробуйте удалить эту sys.stdout = old_stdout линию и добавить stdout=sys.stdout к вашей основной технологической линии для ex like. Popen(***,stdout=sys.stdout)