我已经看到过关于此的其他各种帖子,但不幸的是我仍然无法解决这个问题:
如果我这样做:
temp = subprocess.Popen("whoami", shell=True, stdout=subprocess.PIPE)
out = temp.communicate()
print(out)
然后我得到了一些形式
(b'username\n', None)
通过其他尝试(例如添加.wait()),我一直在一行获取用户名,并在下一行获取0作为返回码,但只有0存储在我的变量中。 / p>
有一种简单的方法可以格式化,只在变量中存储用户名吗?我尝试了类似的东西[3:11],但这没效果。
由于
答案 0 :(得分:3)
最简单的方法是使用subprocess.check_output()
:
username = subprocess.check_output("whoami").strip()
答案 1 :(得分:1)
username = subprocess.check_output(['whoami']).strip()
或更好:
username = getpass.getuser()
答案 2 :(得分: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
,则文件对象 stdin , stdout 和 stderr 将作为 universal newlines 模式使用locale.getpreferredencoding(False)
返回的编码。
答案 3 :(得分:0)
communicate
之后,您可以阅读temp.returncode
的返回代码。
来自http://docs.python.org/dev/library/subprocess.html#subprocess.Popen.returncode:
Popen.returncode
子返回码,由poll()和wait()设置(间接由communic()设置)。 “无”值表示该进程尚未终止。
如果您关心的是呼叫成功,请使用subprocess.check_output
;非零回报将提升CalledProcessError
。