2

というプログラムがありtest.exeます。プログラムは python/pyqt4 で書かれています。コードのある時点で、アプリケーションの再起動をトリガーしたいので、プログラムを起動して現在実行中のプログラムをすぐに閉じるために、メインプロセスから独立して実行される分離プロセスを作成する必要があります。

問題は、どうやってもうまくいかないことです。同じexeを実行する代わりに、タイムアウト後にexeを呼び出す.batファイルを作成しようとしました(ローカルホストにpingを追加しました)。

notepad.exe のコピーのような他のプログラムを実行しようとすると、問題なく動作しますが、アプリケーションを再起動するための解決策を見つけることができません。ここに私のテストコードがあります:

import os
import sys
import subprocess

from PyQt4 import QtGui, QtCore

if getattr( sys, 'frozen', False ):
    ROOT_PATH = os.path.dirname( os.path.abspath( sys.executable ) )
elif __file__:
    ROOT_PATH = os.path.dirname( os.path.abspath( __file__ ) )


class Example( QtGui.QWidget ):

    def __init__(self):
        super(Example, self).__init__()
        self.initUI()

    def initUI( self ):
        qbtn = QtGui.QPushButton('Quit', self)
        qbtn.clicked.connect( self.btn_clicked )
        qbtn.resize(qbtn.sizeHint())
        qbtn.move(50, 50)       

        self.setGeometry(300, 300, 250, 150)
        self.setWindowTitle('Quit button')    
        self.show()

    def btn_clicked( self ):
        p = QtCore.QProcess()
        p.setWorkingDirectory( ROOT_PATH )
        p.startDetached( "start.bat" )
        sys.exit( 0 )

def main():
    app = QtGui.QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

これexeは pyinstaller を使用してコンパイルされ、最終的な場所にありtext.exestart.bat次のようになります。

ping 127.0.0.1 > "bat.txt"
start "" "%~dp0test.exe"

私のバットファイルで置き換えるtest.exeと、動作します。notepad.exe何か案は?

4

1 に答える 1

0

ファイルが表示されるのを監視する別の小さなexeを作成することになりました(reset.txt)。再起動時の主なexetouchingファイルはその後終了します。2 番目の exe はデーモンとして実行され、ファイルを確認すると最初の exe が呼び出されます。

改善のために開いています...

于 2013-05-15T23:25:46.520 に答える