如何使用子流程访问Python中的Bash环境变量?

如何使用子流程访问Python中的Bash环境变量?,python,bash,variables,subprocess,Python,Bash,Variables,Subprocess,我可以使用Python中处理的子流程查询确定终端的宽度,如下所示: int(subprocess.Popen(['tput', 'cols'], stdout = subprocess.PIPE).communicate()[0].strip('\n')) 如何以类似的方式确定Bash用户名?那么,我如何才能在Python中使用子流程看到${USER}的价值呢?正如Wooble和dano所说,不要为此使用子流程。使用os.getenv(“用户”)或os.environ[“用户”] 如果您真的想

我可以使用Python中处理的
子流程
查询确定终端的宽度,如下所示:

int(subprocess.Popen(['tput', 'cols'], stdout = subprocess.PIPE).communicate()[0].strip('\n'))

如何以类似的方式确定Bash用户名?那么,我如何才能在Python中使用子流程看到
${USER}
的价值呢?

正如Wooble和dano所说,不要为此使用子流程。使用
os.getenv(“用户”)
os.environ[“用户”]

如果您真的想使用
子流程
,那么
Popen(['bash','-c',echo“$USER”]”,…)
似乎和
Popen(“echo$USER”,shell=True)
一样工作,尽管这两种方式都不是特别令人愉快的(尽管要在正在执行的命令行上使用环境变量,shell必须参与其中,所以您不能真正避免它)


编辑:我以前的子流程建议似乎不正确。我认为我的原始测试有缺陷。

为什么要使用
子流程
?python流程本身可以访问环境。您可以使用它。例如
打印(os.environ['USER'])
非常感谢您的建议。部分动机是想了解如何在
子流程
方法中使用Bash变量。我不确定如何执行此操作。访问环境变量${USER}这是一个简单的例子。问题是,使用bash样式的变量名调用Python子流程不会进行任何变量扩展、全局处理等。Python子流程和您正在调用的程序的argv/argc之间没有外壳。无关:在Python 3.3+中有外壳,用于获取终端的宽度/高度。非常感谢您的支持关于使用模块
os
getenv
environ
方法的建议。这很有效。想要使用模块
子流程
的部分动机是想了解如何在
子流程
方法中使用Bash变量。我已经尝试了
子流程.Popen(['echo','${USER}'))
建议,但我收到了“${USER}”'作为响应,而不是Python 2.7.6和3.4.0中的实际环境变量值。您知道如何访问实际值吗?啊,太好了。您的编辑已经成功了。再次感谢您的帮助!@d3pd:a。@Etan Reisner:不要同时使用列表参数和
shell=True
。如果使用
shell=True,请始终传递字符串
相反。@J.F.Sebastian你能告诉我为什么吗?(我绝不是python人。)