第二种方法会出错,因为该文件不可执行。你可以解决这个问题,但使用相同的 python 可执行文件重新运行脚本可能更健壮。避免对脚本路径进行硬编码也是一个好主意。
这是一个实现所有这些的简单演示脚本:
import sys, os, subprocess
from PyQt4 import QtCore, QtGui
FILEPATH = os.path.abspath(__file__)
class Window(QtGui.QWidget):
def __init__(self):
super(Window, self).__init__()
self.button = QtGui.QPushButton(
'Restart [PID: %d]' % QtGui.qApp.applicationPid(), self)
self.button.clicked.connect(self.handleButton)
layout = QtGui.QVBoxLayout(self)
layout.addWidget(self.button)
def handleButton(self):
try:
subprocess.Popen([sys.executable, FILEPATH])
except OSError as exception:
print('ERROR: could not restart aplication:')
print(' %s' % str(exception))
else:
QtGui.qApp.quit()
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
window = Window()
window.setGeometry(600, 400, 100, 50)
window.show()
sys.exit(app.exec_())