1

実行中のプロセスにいくつかの値を渡したいのですが、どうすればよいですか?

たとえば、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()
4

1 に答える 1

1

ポペンはどうですか?それを使用して、stdinのプロセスに物事を渡すことができます。

または、コマンドのようなものを試すこともでき"yes | /tmp/worker.py"ます。 yes'y'の束をstdoutにダンプするだけで、worker.pyによって取得されます。

さらに簡単に、"echo y | /tmp/worker.py"コマンドとして使用します。試してみたところ、うまくいきました。

于 2012-06-14T01:21:57.947 に答える