将管道子流程标准输出输出到变量

我想pythong使用subprocess模块在中运行命令,并将输出存储在变量中。但是,我不希望将命令的输出打印到终端。对于此代码:


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。Python将其吐出:


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


慕慕森
浏览 906回答 3
3回答

胡说叔叔

如果您使用的是python 2.7或更高版本,执行此操作的最简单方法是使用subprocess.check_output()命令。这是一个例子:output = subprocess.check_output('ls')要也重定向stderr,可以使用以下命令:output = subprocess.check_output('ls', stderr=subprocess.STDOUT)如果要将参数传递给命令,则可以使用列表,也可以使用调用Shell并使用单个字符串。output = subprocess.check_output(['ls', '-a'])output = subprocess.check_output('ls -a', shell=True)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python