jus*_*ris 2 ruby mysql terminal console mysqldump
我想将mysqldump的输出分配给变量,稍后使用生成的输出.
> 1.9.3-p125 :020 > x = `mysqldump falala` mysqldump: Got error: 1045: Access denied for user 'root'@'localhost' (using password: NO) when
> trying to connect
=> ""
> 1.9.3-p125 :021 > x
=> ""
Run Code Online (Sandbox Code Playgroud)
不.X返回空,甚至无法检查是否有错误
> 1.9.3-p125 :022 > x = system("mysqldump falala") mysqldump: Got error: 1045: Access denied for user 'root'@'localhost' (using password: NO)
> when trying to connect
=> false
1.9.3-p125 :023 > x
=> false
Run Code Online (Sandbox Code Playgroud)
更好.这样,如果命令成功,x仍然有信息,但仍然没有控制台输出.
我还是Ruby的新手,但我认为发生的事情是Ruby继续运行而不等待mysqldump做它的事情,但我真的需要那个输出(因为如果发生错误,脚本会邮寄错误/控制台输出)
我需要运行的完整命令是这样的
mysqldump --host=#{host} --user=#{user} --password=#{pass} #{name} | gzip -9 > #{name}.sql.gz
反引号和#system都会阻止父进程,直到子进程退出.#system仅返回退出状态代码.反引号只返回stdout.所以你也希望得到stderr.一种方法是使用Open3:
require 'open3'
stdout, stderr, status = Open3.capture3('mysqldump', 'falala')
fail "An error happened: #{stderr}" unless status.exitstatus == 0
Run Code Online (Sandbox Code Playgroud)
这种方法显然不适用于大型转储,因为整个转储被插入到stdout变量中.要将mysqldump的输出重定向到文件,我建议查看Process.spawn.
| 归档时间: |
|
| 查看次数: |
292 次 |
| 最近记录: |