来自powershell的Python捕获回复

来自powershell的Python捕获回复,python,powershell,stringio,communicate,cstringio,Python,Powershell,Stringio,Communicate,Cstringio,下面的代码在手动输入时可以工作,但是当我运行program.py时,不会打印任何内容。我的最终目标是从用户pc检索这些数据,以创建一种简单的方法来重新创建快捷方式。。。。我的用户不知怎么失去了他们哈哈 import smtplib, os, subprocess, sys from string import ascii_uppercase from cStringIO import StringIO data = os.popen(r"dir %userprofile%\desktop\*.

下面的代码在手动输入时可以工作,但是当我运行program.py时,不会打印任何内容。我的最终目标是从用户pc检索这些数据,以创建一种简单的方法来重新创建快捷方式。。。。我的用户不知怎么失去了他们哈哈

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

请尝试删除此
sys.stdout=old\u stdout
行,并将
stdout=sys.stdout
添加到您的主流程行中,以便执行类似操作。
Popen(***,stdout=sys.stdout)

我认为代码正确。。。我想原因可能在别的地方。您可以尝试
sys.\uu stdout\uuu.write(shared)
而不是最后的
print shared
。谢谢您的回复。我试过了,但还是一无所获。我认为一开始什么都没有被抓获。奇怪的是,在尝试了很多东西之后,打印是空的,没有错误,只是空的。