用Ruby写的程序,
进程是UI界面:
@pro = Qt::Process.new()
connect(@pushButton_1, SIGNAL('clicked()'),self, SLOT('handle_clicked()'))
connect(@pushButton_3, SIGNAL('clicked()'),self, SLOT('sendToClient()'))
connect(@pro, SIGNAL('readyReadStandardOutput()'),SLOT('readResult()'))
connect(@pro, SIGNAL('finished(int,QProcess::ExitStatus)'),SLOT('finished()'))
def sendToClient
number = @pro.write(@lineEdit_1.text())
puts number
end
def handle_clicked
@pro.start("ruby test1.rb")
end
def finished
@textEdit.append("后台程序运行结束。")
end
def readResult
data = @pro.readAllStandardOutput()
@textEdit.append(data.to_s.chomp!)
end
点击按钮1,开启子进程pro,点击按钮2,把lineEdit_1里的值通过write()传送给pro。
绑定信号和槽,子进程中有标准输出时,输出到主进程的textEdit中。
子进程:
puts "后台程序正在运行1..."
STDOUT.flush
f1 = File.new('1.txt','w')
f2 = File.new('2.txt','w')
STDOUT.puts "请输入用户名(首次登陆即为注册,用户名长度不超过20个字符。):"
STDOUT.flush
user_name = STDIN.gets.chomp
f1.puts user_name
STDOUT.puts "请输入密码(密码长度不超过16个字符)"
STDOUT.flush
password = STDIN.gets.chomp
f2.puts password
问题如下:现在可以实现,主进程接收子进程的标准输出,然后点击按钮后,向子进程发送用户名,子进程收到用户名,但是收到之后的"请输入密码(密码长度不超过16个字符)"却无论如何也无法输出,加了向文件中的写操作后发现,只有1.txt被写入了,而且子进程是不停的接收user_name ,比如点击了3次按钮,发送了三个字符串向子进程,子进程退出后,一股脑的向1.txt中写了3个字符串。
其实就是子进程停止在
user_name = STDIN.gets.chomp
f1.puts user_name
这两行里了,貌似在循环读取。
一个下午加晚上都不知道问题出在哪里,麻烦大家帮我看看,感激不尽。
------最佳解决方案--------------------
如果子进程是控制台程序,仔细想想哪里的问题?
控制台程序输入一行字符串之后要“按回车”完成输入。
向QProcess写入的时候每行末尾要有回车符“\n”;
------其他解决方案--------------------
谢谢您的耐心解答,这个可能是初学者很容易犯的错误,我曾经想过,我以为Qt的write()会像Ruby一样加入一个回车,我按您说的改了一下,果然就成功了。
再次感谢~~