2

私はこれについて他のさまざまな投稿を見てきましたが、残念ながら私はまだこれを理解することができませんでした:

私がこのようなことをした場合:

temp = subprocess.Popen("whoami", shell=True, stdout=subprocess.PIPE)
out = temp.communicate()
print(out)

それから私は何かの形を手に入れます

(b'username\n', None)

他の試み(.wait()の追加など)では、ある行でユーザー名を取得し、次の行で戻りコードとして0を取得しましたが、変数には0のみが格納されていました。

ユーザー名のみを変数に格納するようにフォーマットする簡単な方法はありますか?out [3:11]のようなものを試しましたが、うまくいきませんでした。

ありがとう

4

4 に答える 4

5

最も簡単な方法は、以下を使用することsubprocess.check_output()です。

username = subprocess.check_output("whoami").strip()
于 2012-06-28T15:50:39.387 に答える
1
username = subprocess.check_output(['whoami']).strip()

またはそれ以上:

username = getpass.getuser()
于 2012-06-28T15:51:29.887 に答える
1

引数を追加すると、呼び出しに文字列を返すようにuniversal_newlines=True指示されます。subprocess私はバイトストリームを明示的にデコードする代わりにこれを使用してきました。

temp = subprocess.Popen("whoami", 
                        shell=True, 
                        stdout=subprocess.PIPE, 
                        universal_newlines=True)
out = temp.communicate()
print(out)

# prints: ('username\n', None)

サブプロセスドキュメント

Universal_newlinesがの場合True、ファイルオブジェクトstdinstdout、およびstderrは、によって返されるエンコーディングを使用して、ユニバーサルニューラインモードでテキストストリームとして開かれますlocale.getpreferredencoding(False)

于 2013-05-30T03:07:27.170 に答える
0

の後communicate、からリターンコードを読み取ることができますtemp.returncode

http://docs.python.org/dev/library/subprocess.html#subprocess.Popen.returncodeから:

Popen.returncode poll()およびwait()によって(および間接的にcommunicate()によって)設定される子の戻りコード。None値は、プロセスがまだ終了していないことを示します。

呼び出しが成功することだけが気になる場合は、subprocess.check_output;を使用します。ゼロ以外のリターンはを上げCalledProcessErrorます。

于 2012-06-28T15:52:19.873 に答える