具体来说,我使用:
Python 2.4.3 (#1, May 24 2008, 13:47:28)
[GCC 4.1.2 20070626 (Red Hat 4.1.2-14)] on linux2
我正在尝试获取带有列名和边框的mysql查询的原始结果。下面是在bash中运行的原始命令:
[root@machine ~]# mysql -u root -e 'show databases;'
+--------------------+
| Database |
+--------------------+
| dbA |
| dbB |
| dbC |
+--------------------+
在Python中将此值存储到变量时遇到问题:
import subprocess
cmd_array = ["mysql", "-u", "root", "-e", "show databases"]
p = subprocess.Popen(cmd_array)
raw_data = p.communicate()[0]
# Console outputs:
# +--------------------+
# | Database |
# +--------------------+
# | dbA |
# | dbB |
# | dbC |
# +--------------------+
#
# raw_data is None
p = subprocess.Popen(cmd_array, stdout=subprocess.PIPE)
rawData = p.communicate()[0]
print rawData
# Console outputs:
# Database
# dbA
# dbB
# dbC
#
# rawData is "Database\ndbA\ndbB\ndbC"
在python变量中存储mysql输出的漂亮打印版本的最佳方法是什么?你知道吗
您需要使用
-t
:还可以使用
check_output
存储输出。你知道吗mysql
根据是从控制台(pseudo terminal,pty)调用还是从另一个程序调用,操作方式不同。当从另一个程序调用时,它故意简洁,以便于解析。一种思考的方式是是原始结果
对人们来说是一个很好的结果。你知道吗
我不知道什么是“列可见字符串”,但是如果您想处理程序中的数据,就可以得到您想要的易于解析的结果。你知道吗
如果您真的想要高级打印版本,可以使用
pexpect
或pty
模块来模拟终端。举个例子:看起来
mysql
使用isatty()
来确定STDOUT是否是一个终端,然后修改输出。你知道吗我可以通过指定
table
或-t
选项来获取表格边框:cmd_array = ["mysql", "-t", "-u", "root", "-e", "show databases"]
相关问题 更多 >
编程相关推荐