実行中のプロセスにいくつかの値を渡したいのですが、どうすればよいですか?
たとえば、worker.py があり、このコードがあるとします。
import os
import sys
def my_test():
print " I am starting now"
a = raw_input("Do you want to start ? ")[0].lower()
if a == "y":
print "Yes I am starting now"
my_test()
このファイルは実行可能ファイルです。そして、そのファイルに別のpythonファイルがあり、コマンドを使用してworker.pyをこのように開始しています。
status, message = commands.getstatusoutput ("/tmp/worker.py")
しかし、raw_input のため、コマンドは次のレベルに進むことができません。
コマンドまたはサブプロセスを介してワーカーに「y」を渡すことができる方法はありますか?
PS:pyqt guiを介してこのコマンドを実行しています。
前もって感謝します。
アップデート :
私はついにそれを見つけました。これが私の解決策です。はい、pexpectを使用しています。
私の問題の完全に機能するソリューション。将来、他の人に役立つことを願っています:)
#!/usr/bin/python
import sys
import pexpect
import re
from PyQt4 import QtGui, QtCore
class Example(QtGui.QWidget):
def __init__(self):
super(Example, self).__init__()
self.initUI()
def initUI(self):
self.setGeometry(300, 300, 250, 150)
self.setWindowTitle('Message box')
qbtn = QtGui.QPushButton('Quit', self)
qbtn.clicked.connect(self.spawnJob)
self.qtxte = QtGui.QPlainTextEdit(self)
qbtn.resize(qbtn.sizeHint())
qbtn.move(260, 150)
self.setGeometry(300, 300, 340, 200)
self.setWindowTitle('Quit button')
self.show()
def spawnJob(self):
self.child = pexpect.spawn ('/usr/local/bin/python /tmp/worker.py')
a = self.child.expect ('Do you')
if str(self.child.after) == 'Do you':
self.test_one()
before_msg = self.child.before
self.qtxte.appendPlainText(before_msg)
for ln in self.child.readlines():
self.qtxte.appendPlainText(ln.rstrip())
def test_one(self):
reply = QtGui.QMessageBox.question(self, 'Message',
"Are you sure to quit?", QtGui.QMessageBox.Yes |
QtGui.QMessageBox.No, QtGui.QMessageBox.No)
if reply == QtGui.QMessageBox.Yes:
self.child.sendline ('y')
else:
self.child.kill(0)
def main():
app = QtGui.QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
if __name__ == '__main__':
main()