![](/img/trans.png)
[英]pyscreenshot as ImageGrab doesn't work after compiling with PyInstaller to exe
[英]python script with singleton doesn't work after converting it to exe with pyinstaller
我已經在 python 中創建了我的應用程序,我希望一次只執行一個應用程序。 所以我使用了單例方法:
from math import fmod
from PyQt4 import QtCore, QtGui
from PyQt4.QtCore import SIGNAL
import tendo
import pywinusb.hid as hid
import sys
import os
import time
import threading
import UsbHidCB05Connect
if __name__ == "__main__":
just_one = tendo.singleton.SingleInstance()
app = QtGui.QApplication(sys.argv)
screen_UsbHidConnect = ConnectFunction()
screen_UsbHidConnect.show()
sys.exit(app.exec_())
使用 pyinstaller 將其轉換為 exe 時,我沒有收到任何錯誤,但是當我嘗試運行該 exe 時,出現錯誤:“無法執行腳本 mainUsbHidCB05v01”
如果在我的代碼中我評論:
import tendo
和
just_one = tendo.singleton.SingleInstance()
我將腳本轉換為 exe,該 exe 運行沒有任何問題。 但是我可以運行多個實例/程序,而我不希望那樣。
我正在使用 pyinstaller,例如:
pyinstaller --noconsole -F -i cr.ico mainUsbHidCB05v01.py
我也試過沒有 -F 選項的 pyinstaller。 結果是一樣的。
任何人都知道為什么在代碼中使用單例選項時 exe 不運行?
謝謝。
我遇到了同樣的問題,我沒有找到使用tendo的單一實例的方法。 如果您現在需要一個解決方案,您可以使用“os”庫創建一個文件,並在那里放置一個變量,當程序運行時它為 1,否則為 0,因此您只需在開始時驗證該變量你的程序。 這不是最好的方法,但您可以在需要找到最佳解決方案的時候使用它。 :)
你好,又是我! 所以,我找到了解決方案。 我搜索了很多,我發現了讓程序只運行一次(單一實例)的非常不同的方法。
總之,使用庫操作系統可以使用鎖定文件,但是如果計算機因能量下降而關閉,則該文件在返回時將保持鎖定您的應用程序,因為應用程序沒有正確關閉。 還有另外一種方式,當您使用 TENDO 庫創建單例時,也有類似的方式,但是每個人都使用某些特定的 DLL,而當您使用 pyinstaller 時,添加/導入 dll 可能會有些困難。
最后,還有第三種方法,它創建與 PC 的套接字通信,以驗證應用程序是否正在使用某個特定端口。 這對我來說就像一種魅力。 該庫是: https : //pypi.org/project/Socket-Singleton/
一個簡單可行的腳本:
from time import sleep
from Socket_Singleton import Socket_Singleton
#Socket_Singleton(address="127.0.0.1", port=1337, timeout=0, client=True, strict=True)
Socket_Singleton()
print("hello!")
sleep(10)
print("hello 2!")
我將它與我的應用程序一起使用並使用 pyinstaller 創建了一個 .EXE 文件,它運行良好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.