我正在尝试从Ruby运行git add -p
命令。问题在于此命令会显示文件的部分内容并等待用户输入,可能会打开git编辑器。由于这个原因,常规的内核方法执行系统命令将无法工作。我尝试使用open3
,目前的情况如下:
require "open3"
Open3.popen3("\git add -p #{files_to_add.join(" ")}") do |stdin, stdout, stderr, wait_thr|
end
我不知道应该在代码块里放什么内容,也没有在互联网上找到任何线索。
有什么想法可以解决这个问题吗?
注意:我不想使用任何宝石(gems)
编辑:open3
无法工作。我现在正在尝试使用pty
。以下是我的代码:
require "pty"
begin
PTY.spawn("\git add -p #{files_to_add.join(" ")}") do |r, w, pid|
begin
r.each { |line| print line }
rescue Errno::EIO
end
end
rescue PTY::ChildExited => e
puts "The child process exited!"
end
这段代码打印了第一个要打补丁的块,但是接下来"问题"(换句话说,标准输入提示)并没有出现。显然,我没有在上面的代码中打印它,但我似乎找不到如何解决这个问题。有什么想法吗?
git add -p
命令吗?看起来你正在自动化/简化某些工作流程。也许有一些git
命令和选项可以避免交互模式。我不知道你脚本的上下文,但是深入研究一下 git 手册可能会很值得。 - zwippiegit add -p
,因为我正在为我的个人项目创建该命令的包装器。我目前正在尝试使用pty
,看起来我已经有所进展了。 - Robert Audi%x {command}
?我在Windows上尝试了一下pause
命令,它等待输入。 - Darek Nędza