發表文章

系統工程師神器!如何讓Python在Linux上執行ssh(三)pyinstaller環境建置@Sunny的工程師日記

        近期因為專案的關係,必須同步更新多台Linux設備的程式,但每次要更新3台以上設備就會讓我頭很痛,所以花了一些時間找辦法讓我更新的步驟能夠更快速更簡單。因此我使用了Python Paramiko套件來實現ssh及sftp的工作,實現佈建環境自動化的功能。         上一篇講完如何使用Python來實現ssh及sftp等工具,這一篇來講述如何將撰寫完成的Python程式碼轉為.exe執行檔或是Linux執行檔,實現任何設備都可以執行的動作。 系統需求: Linux。 Python 3.X版本。 Python pip。 Pyinstaller套件。 建置方式: 1.更新Python的pip到最新的版本。 python3 -m pip install --upgrade pip 2.安裝pyinstaller套件。 pip3 install pyinstaller 3.完成安裝後,建立HelloWorld.py。 vi HelloWorld.py 4.撰寫程式碼。 print('hello world') 5.將HelloWorld.py編譯成一個執行檔。 pyinstaller -f HelloWorld.py 6.進入dist資料夾執行程式。 cd dist/ ./HelloWorld 以上為安裝步驟Pyinstaller的安裝及操作,下一篇會提到如何將上一篇所提到的ssh及sftp工具編譯成執行檔並實際運用。 以上如有任何問題,歡迎留言與我討論。

系統工程師神器!如何讓Python在Linux上執行ssh(二)Python Paramiko程式運行@Sunny的工程師日記

        近期因為專案的關係,必須同步更新多台Linux設備的程式,但每次要更新3台以上設備就會讓我頭很痛,所以花了一些時間找辦法讓我更新的步驟能夠更快速更簡單。因此我使用了Python Paramiko套件來實現ssh及sftp的工作,實現佈建環境自動化的功能。 系統需求: Linux。 Python 3.X版本。 Python pip。 Paramiko套件。 程式碼: 1.ssh操作。 #!/usr/bin/python # coding:utf-8 import paramiko import configparser def readini(): print("hello!") try: config = configparser.ConfigParser() config.read('upload.ini') address = config.get('REMOTE', 'ipaddress') port = config.get('REMOTE', 'port') username = config.get('REMOTE', 'username') userpwd = config.get('REMOTE', 'password') suserpwd = config.get('REMOTE', 'sudo_password') command = config.get('REMOTE', 'command') except Exception as e: print('\033[91m<<< Read configuration FAIL! >>>\033[0m', e) print('IMPORT INI SUCCESS.') # readini() port = 22 ssh = paramiko.SSHClient() ssh.set

系統工程師神器!如何讓Python在Linux上執行ssh(ㄧ)佈建Python Paramiko運行環境@Sunny的工程師日記

        近期因為專案的關係,必須同步更新多台Linux設備的程式,但每次要更新3台以上設備就會讓我頭很痛,所以花了一些時間找辦法讓我更新的步驟能夠更快速更簡單。因此我使用了Python Paramiko套件來實現ssh及sftp的工作,實現佈建環境自動化的功能。 系統需求: Linux。 Python 3.X版本。 Python pip。 Paramiko套件。 建置方式: 1.與軟體資料庫同步。 apt-get update 2.安裝Python 3.X版本。遇到任何詢問只需要填入Y繼續下一步。 apt-get install python3 3.安裝Python軟體管理系統。遇到任何詢問只需要填入Y繼續下一步。 apt-get install python3-pip 4.下載Paramiko套件。 pip3 install paramiko 以上為安裝步驟Paramiko,下一篇會提到如何撰寫程式碼達成功能。 以上如有任何問題,歡迎留言與我討論。

C# M2MQTT 斷線重連@Sunny的工程師日記

最近因為專案的需求,需要做出一個連續24小時365天運作的監看系統,為了確保通訊能夠不中斷就必須做到MQTT斷線重連,避免訊息漏接。 需求: 建立MQTT連線。 MQTT發送訊息。 MQTT接收訊息。 建置方式: 引用M2MQTT Library。 建立MQTT連線。 建立MQTT發送訊息Function。 建立MQTT接收訊息Function。 建立MQTT斷線Function。 以下是我的程式碼,請自行參考。 using uPLibrary.Networking.M2Mqtt; using uPLibrary.Networking.M2Mqtt.Exceptions; using uPLibrary.Networking.M2Mqtt.Messages; public static MqttClient client;//MqttClient string ls_Ip = "127.0.0.1";//Broker IP static void ConnectionClosed(object sender, EventArgs e) { //MQTT斷線的事件,將中斷連線時需要做的事情放在這邊 } public void Client_MqttMsgPublishReceived(object sender, MqttMsgPublishEventArgs e) { //MQTT接收的事件 } static void MqttMsgSubscribed(object sender, MqttMsgSubscribedEventArgs e) { //MQTT訂閱的事件 } public void mqttconnect() { try { client = new MqttClient(ls_Ip);//MQTTServer在本機 client.MqttMsgPublishReceived += Client_MqttMsgPublishReceived;//當接收到訊息時會啟動 client.MqttMsgSubscribed += MqttMsgSubscribed;//當Topic訂閱成功時會

Prism測試

//限制輸入的內容必須為數字 private void tb_KeyPress_limite_KeyPress(object sender, KeyPressEventArgs e) { //限定輸入的內容僅能有一個小數點 if (e.KeyChar == '.') { foreach (char i in (sender as TextBox).Text)//判定textBox1是否有小數點 { if (i == '.') e.Handled = true;//有 } return; } // e.KeyChar == (Char)48 ~ 57 -----> 0~9 // e.KeyChar == (Char)8 -----------> Backpace // e.KeyChar == (Char)13-----------> Enter if (e.KeyChar == (Char)48 || e.KeyChar == (Char)49 || e.KeyChar == (Char)50 || e.KeyChar == (Char)51 || e.KeyChar == (Char)52 || e.KeyChar == (Char)53 || e.KeyChar == (Char)54 || e.KeyChar == (Char)55 || e.KeyChar == (Char)56 || e.KeyChar == (Char)57 || e.KeyChar == (Char)13 || e.KeyChar == (Char)8) { e.Handled = false; } else { e.Handled = true; } } ls cd /home/moxa/config

C# Textbox 輸入限制數字及一個小數點@Sunny的工程師日記

在開發程式的時候,常常會有某些情況是限制輸入的內容,例如我現在要一組浮點數的內容,但是操作者往往不會依照著程式設計師的想法走,或許他會多加一個小數點,或許會加入奇怪的標點符號,這就會照成程式的轉換型別時出現問題,所以要避免這種狀況,就必須要讓使用者輸入內容時作出限制。 範例: 輸入一個小數點。 數字範圍0~9。 不能夠出現奇怪的標點符號 解決方式: 要如何判斷0~9的數字區間呢?最快的做法就是判斷使用者所輸入的鍵盤對應的數字是否落在0~9之間,到這邊還不要太開心,因為電腦判斷0~9的阿拉伯數字是必須經過換算才會得到這個結果,所以這邊必須去對照ASCII Code。阿拉伯數字0~9分別對應ASCII Code DEC 48~57。 此時Textbox就可以有效的判斷輸入的內容是否為阿拉伯數字0~9區間,但為了輸入方便,必須將Enter 及delete按鍵也加入到判斷,這樣子輸入上會變得非常方便。 以下是程式碼的,可以自行參考。 //限制輸入的內容必須為數字 private void tb_KeyPress_limite_KeyPress(object sender, KeyPressEventArgs e) { //限定輸入的內容僅能有一個小數點 if (e.KeyChar == '.') { foreach (char i in (sender as TextBox).Text)//判定textBox1是否有小數點 { if (i == '.') e.Handled = true;//有 } return; } // e.KeyChar == (Char)48 ~ 57 -----> 0~9 // e.KeyChar == (Char)8 -----------> Backpace // e.KeyChar == (Char)13-----------> Enter if (e.KeyChar == (Char)48 || e.KeyChar == (Char