【问题标题】:Python script does not recognize Mysql queryPython 脚本无法识别 Mysql 查询
【发布时间】:2020-12-02 03:16:08
【问题描述】:

我正在尝试使用 sshpass 接收查询结果,示例如下:

sshpass -p password ssh user@ip "mysql -u user -pdbpassword -h ip -P port database -e \"SELECT * FROM database.ViewName;\""

当我从本地机器启动该命令时,它可以工作。

但是当我在我的 Python 脚本上做时,它没有:

import subprocess
import sys
from subprocess import check_output


command = 'sshpass -p password ssh user@ip "mysql -u user -pdbpassword -h ip -P port database -e \"SELECT * FROM database.ViewName;\""'
output = check_output(command, shell=True)

它返回这个错误:

bash: -c: línea 0: EOF inesperado mientras se buscaba un `"' coincidente
bash: -c: línea 1: error sintáctico: no se esperaba el final del fichero
/bin/sh: 1: : Permission denied
Traceback (most recent call last):
  File "ipcompare.py", line 8, in <module>
    output2 = check_output(command2, shell=True)
  File "/usr/lib/python2.7/subprocess.py", line 223, in check_output
    raise CalledProcessError(retcode, cmd, output=output)
subprocess.CalledProcessError: Command 'sshpass -p password ssh user@ip "mysql -u user -pdbpassword -h ip -P port database -e \"SELECT * FROM database.ViewName;\""' returned non-zero exit status 127

我试过了:

  • chmod 777 到我的脚本,错误还是一样。
  • 将双引号更改为单引号。
  • 转义所有特殊字符。

【问题讨论】:

  • 不确定这是否会执行 sql 查询。

标签: python mysql bash ssh


【解决方案1】:

根据这一行:

/bin/sh: 1: : Permission denied

您似乎没有执行该 shell 命令的权限。您确定在本地运行它时,您没有一些提升的权限(以前使用 'sudo' 运行某些命令等)?

它会在你的地方稍微隔离一下,例如。从简单的开始:

command = 'sshpass -p password ssh user@ip "pwd"'

如果可行,您可以进一步尝试委托 mysql 查询。

另外,您是在同一台机器上运行命令和脚本吗?有时,数据库的 IP 地址集有限,可以访问它。检查您的数据库是否不是这种情况。

【讨论】:

  • 是的,我按照您的建议尝试了更简单的命令,并且有效。该脚本正在从我的机器运行到另一台机器。
【解决方案2】:

我这样做是为了解决问题:

import subprocess
import sys
from subprocess import check_output


command = 'sshpass -p password ssh user@ip "mysql -u user -pdbpassword -h ip -P port database -e \\\"SELECT * FROM database.ViewName;\\\""'
output = check_output(command, shell=True)

转义转义字符是这个问题的答案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-11
    • 1970-01-01
    • 1970-01-01
    • 2020-08-29
    • 1970-01-01
    • 2012-02-08
    • 2023-03-15
    • 1970-01-01
    相关资源
    最近更新 更多