Python pythonw子进程check_output不工作

Python pythonw子进程check_output不工作

问题描述:

我有一个关于pythonw的问题。我正在制作一个应该在后台执行的程序。当它启动时,它应该发送计算机名,用户名和检查结果以查看该程序是否具有管理权限。以下是有关部分客户端代码:Python pythonw子进程check_output不工作

computername = subprocess.check_output("echo %computername%", shell=True).decode(sys.stdout.encoding).splitlines()[0] 
username = subprocess.check_output("echo %username%", shell=True).decode(sys.stdout.encoding).splitlines()[0] 
isadmin = ctypes.windll.shell32.IsUserAnAdmin() 
sleep(0.5) 
s.send(computername.encode() + ";;".encode() + username.encode() + ";;".encode() + str(isadmin).encode()) 

这是一块服务器代码,是应该接受它:

data = conn.recv(1024).decode().split(";;") 
print(data) 
clientcount += 1 
clientlist.append({"conn": conn, "ip": ip, "id": clientcount, "name": data[0] + "\\" + data[1], "isadmin": int(data[2])}) 

(打印行只是为了调试) 所以这里的问题。当我执行客户端代码为client.py,一切都正常工作,我得到这样的输出:

['DESKTOP-#######', '######', '0']

和代码可以继续。但是,当我执行程序为client.pyw,因为它应该是,我得到:

['']

所以当然我得到一个IndexError。我猜测subprocess.check_output出了问题。这是正常的吗?我可以用什么来替换它,所以它在后台工作?

(我使用python 3.5)

感谢

.pyw没有一个控制台,所以无stdin重定向运行pythonw时(如重复的解释有一个问题与subprocess我刚刚挖出来)。

在您的情况下,通过为输入&错误提供有效的流来解决问题,即可添加stdin=subprocess.PIPE,stderr=subprocess.STDOUT

但是,最重要:

subprocess.check_output("echo %computername%", shell=True).decode(sys.stdout.encoding).splitlines()[0] 

真的矫枉过正

os.getenv("computername") 

,这将与pythonw工作,以便做到这一点,它的清洁剂,它肯定会解决你的问题。

+0

Je suppose que tu estfrançaisvu ton nom,çatombe bien,moi aussi ^^。 Haha,quel idiot,j'avaiscomplètementoubliéos.getenv ==“。Je vaisutiliserça,mais sinon,j'airésolumonproblème。C'étaita cause du sys.stdout.encoding,vu que c'est en arrière计划这不是一个传统的标准^^“。 Sansçaçamarche,mais je vais quandmêmeutiliser os.getenv(),加上干净。留言Merci! – Alpha

+0

oui,c'est mieux!是的,它更好。 –