【发布时间】:2016-05-23 14:55:25
【问题描述】:
在我的程序中,我想让用户运行 shell 命令或执行二进制文件。不管我读了多少关于subprocess.Popen 的文章,我都无法找到复制os.system() 功能的方法。
我只是想echo $USER,但似乎没有任何效果。
转shell=True..
>>> subprocess.Popen(['echo', '$USER'], shell=True,\
stdout=subprocess.PIPE,\
stderr=subprocess.PIPE).communicate()
>>> ('\n', '')
传递当前环境变量..
>>> subprocess.Popen(['echo', '$USER'], shell=True,\
env=os.environ\
stdout=subprocess.PIPE,\
stderr=subprocess.PIPE).communicate()
>>> ('\n', '')
那么运行 shell 命令的正确方法是什么?
------- 编辑:要求 ---------
有些人发布了答案,但也许我应该更具体。我想同时保留 stdout、stderr 和返回 value stored 某处。所有答案似乎都给出了一个或另一个。
【问题讨论】:
-
你为什么不直接使用
os.environ['USER']? -
甚至更好,
import getpass和getpass.getuser()用于跨操作系统兼容性。 -
@DanielRoseman 因为我不知道用户将运行什么命令,所以通过所有环境更容易..
标签: python shell subprocess environment-variables os.system