というプログラムがあり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.exe
、start.bat
次のようになります。
ping 127.0.0.1 > "bat.txt"
start "" "%~dp0test.exe"
私のバットファイルで置き換えるtest.exe
と、動作します。notepad.exe
何か案は?