我想使用子流程模块在pythong
中运行命令,并将输出存储在变量中。但是,我不希望将命令的输出打印到终端。 对于此代码:将子流程标准输出转换为变量
def storels():
a = subprocess.Popen("ls",shell=True)
storels()
我得到的终端目录列表,而不是有它存储在a
。我也试过:
def storels():
subprocess.Popen("ls > tmp",shell=True)
a = open("./tmp")
[Rest of Code]
storels()
这也打印ls的输出到我的终端。我甚至用有点过时的os.system方法试过这个命令,因为在终端中运行ls > tmp
并不打印ls
到终端,而是将它存储在tmp
中。然而,同样的事情发生。
编辑:
我得到以下marcog的意见后,下面的错误,但运行更复杂的命令,只有当。 cdrecord --help
。蟒蛇吐出了这一点:
Traceback (most recent call last):
File "./install.py", line 52, in <module>
burntrack2("hi")
File "./install.py", line 46, in burntrack2
a = subprocess.Popen("cdrecord --help",stdout = subprocess.PIPE)
File "/usr/lib/python2.6/subprocess.py", line 633, in __init__
errread, errwrite)
File "/usr/lib/python2.6/subprocess.py", line 1139, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
请注意,Python文档中不鼓励使用`shell = true`。 http://docs.python.org/2/library/subprocess.html#frequently-used-arguments – SamHuckaby 2013-12-09 16:13:51