2017-10-04 1 views
1

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])}) 

(인쇄 라인 그냥 디버깅을위한) 그래서 여기 있어요 문제.

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

및 코드에 갈 수있다 : 나는 client.py으로 클라이언트 코드를 실행하면 모든 것이 정상적으로 작동,이 출력을 얻을. 해야하는데 나는이 client.pyw로 프로그램을 실행할 때, 나는 얻을 :

['']

그래서 당연히 내가 IndexError를 얻을. 서브 프로세스에 문제가있는 것 같아. 체크 아웃. 정상입니까? 내가 대체 할 수있는 것은 무엇이기 때문에 백그라운드에서 작동합니까?

감사합니다 (I 파이썬 3.5을 사용하고 있습니다)

답변

1

.pyw는 콘솔을 가지고 있지 않기 때문에 중복에 설명 된대로 (stdin의 리디렉션하지 않고 pythonw를 실행할 때 문제가 subprocess와 함께있다가 I 그냥 밖으로 파고).

stdin=subprocess.PIPE,stderr=subprocess.STDOUT을 추가하면 & 입력에 유효한 스트림을 제공하여 문제를 해결할 수 있습니다. 무엇보다도

하지만, :

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

가 그렇게 그렇게 pythonw에 맞는지

os.getenv("computername") 

정말 잔인한, 그것은 청소기, 그리고 그것은 확실히 문제를 해결할 것입니다.

+0

제 생각에 응, 준 비영리, 모이 아우스 ^^. 하하, 멍청이, j'avais complètement oublié os.getenv == ". 당신이 사용하고있는 사람, 다른 사람, 다른 사람의 도움을받을 수있는 사람들, sys.stdout.encoding, vu que c'est en 도착 계획은 오래 전부터 끝났습니다 ^^ ". Sans àa ça marche, mais je vais quand même utiliser os.getenv(), clean. 메르시! – Alpha

+0

oui, c'est mieux! 예, 더 좋습니다. –

관련 문제