为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕慕森 2019-11-11 10:55:07
我想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_exceptionOSError: [Errno 2] No such file or directory
查看完整描述

3 回答

?
胡说叔叔

TA贡献1804条经验 获得超8个赞

如果您使用的是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)


查看完整回答
反对 回复 2019-11-11
  • 3 回答
  • 0 关注
  • 905 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信