2017-10-07 37 views
-1

當我遠離山峯時,我使用Raspberry Pi和一個小型python腳本監控我的Photo-voltaic系統,以便每小時讀取數據並將其發送到我的網頁。這是由一個電子機械開關發起的,該開關點亮了15分鐘。但在此期間,該腳本可能會運行兩次,因此我想避免因此而導致混亂(lsdx.eu/GPV_ZSDX)。從python中停止raspbian/debian

我想在腳本的末尾添加一行以停止它,一旦它運行一次,並可能停止raspbian以及在關閉電源之前的乾淨退出。 - 「exit」只退出一個循環,但腳本仍在運行 - 當然,按Ctrl + C不會按我的方式去做; 無法在StackOverflow或Rasbian幫助中的這些高度技術性的消息中找到任何提示。

任何提示? 謝謝

+1

你會很高興向我們展示你到目前爲止所嘗試過的嗎?爲什麼它不起作用。爲了讓別人解決問題而不先嚐試自己,來到這裏並不是很好。例如,如果你想關閉你的RPi,爲什麼不嘗試'os.system('shutdown -hP now')'或者類似的東西? – Torxed

+0

您應該針對特定的編程問題提出具體問題。由於Stack Overflow隱藏了你的密切原因:*「有些問題要求我們推薦或查找書籍,工具,軟件庫,教程或其他非本地資源,因爲它們傾向於吸引自以爲是的答案和垃圾郵件,因此不適合Stack Overflow。而是要描述問題以及到目前爲止解決問題所做的工作。「* – jww

回答

0

exit()命令應退出程序(break是將退出循環的語句)。你看到什麼行爲?

要關閉,請嘗試:

python3:

from subprocess import run 
run('poweroff', shell=True) 

python2:

from subprocess import call 
call('poweroff') 

注:關機,可以在您的系統被稱爲關機,可能需要額外的命令行開關強制關閉(如果需要)。

0

對於你的情況,結構上採用下面的結構的python腳本的功能:

def read_data(): 
    data_reading_voodo 
    return message_to_be_sent 

def send_message(msg): 
    perform_message_sending_voodo 
    log_message_sending_voodoo_success_or_failure 
    return None 

if __name__ == "__main__": 
    msg = read_data() 
    send_message(msg) 

結構就是這樣,python腳本應該運行後退出。

下創建一個shell sript喜歡如下(假設bash和Python,但根據您的使用情況修改)

#!/bin/bash 
python -m /path/to/your/voodo/script && sudo shutdown -h 6 

sudo shudown -h 6關閉腳本運行6分鐘後的樹莓派。這個選項可以幫助您在啓動後有一段時間,如果您想要停止運行重新啓動循環,請將其刪除。

使shell腳本可執行:chmod 755 run_py_script_then_set_shutdown看到man chmod的細節

現在創建一個cronjob在啓動時運行run_py_script_then_set_shutdown

crontab -e然後將下面的行添加到您的crontab

@reboot /path/to/your/shell/script 

保存,重啓PI,就大功告成了。 每次啓動時,python腳本都應該運行並退出。然後,在python腳本退出6分鐘後,rpi將關閉。

你可以(應該)爲你的目的調整6分鐘。

0

感謝所有這些幫助我學習Pyth和Deb的答案。 我終於選擇了在腳本的最後一個非常簡單的解決方案: 進口OS 使用os.system(「現在須藤關機」)

但我牢記這些其他解決方案 再次感謝, 萊昂內爾