在我的程序中,我想让用户运行 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 和返回存储的值保留在某处。所有答案似乎都给出一个或另一个。
最佳答案
感谢 Massiou 的指导,我找到了答案。罪魁祸首是,当使用 shell=True
时,您应该将整个命令作为单个字符串传递!
>>> subprocess.Popen(['echo $USER'], shell=True, \
stdout=subprocess.PIPE,\
stderr=subprocess.PIPE).communicate()
>>> ('manos\n', '')
原因是列表中的第一个参数将作为 shell 脚本执行。其余参数用于 shell 程序本身。
关于python - 在 Python 中使用子进程复制 os.system 功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35362925/