2017-10-04 20 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])}) 

(印刷ラインがちょうどデバッグ用です) は、だからここです問題。私はclient.pyとしてクライアントコードを実行すると、すべてが正常に動作しますが、私はこの出力を得る:

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

とコードが上に行くことができます。することになっていますように私は、client.pywとしてプログラムを実行するときしかし、私が手:

['']

だからもちろん、私ははIndexErrorを取得します。私は何かがサブプロセスで間違っていると推測しています.check_output。それは普通ですか?私はそれを置き換えることができるので、それはバックグラウンドで動作するのですか?

(私はのpython 3.5を使用しています)

おかげ

答えて

1

.pywは、コンソールを持っていないので、私の重複で説明したようにstdinのリダイレクト(なしpythonwを実行しているときに問題がsubprocessでありますちょうど掘り出された)。

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'avaiscomplètementoubliéos.getenv == "。私は、ユダヤ教徒の宗教、宗教、宗教、宗教、宗教、宗教、宗教、到着予定のプランはありません。 Sansçaçamarche、mais je vais quandmêmeutiliser os.getenv()、クリーンアップ。メルシ! – Alpha

+0

oui、c'est mieux!はい、それは良いです。 –

関連する問題