質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

91.02%

  • Python

    5533questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • Raspberry Pi

    612questions

    Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

raspiで自動実行しているプログラムをモニターしたい

解決済

回答 1

投稿

  • 評価
  • クリップ 1
  • VIEW 568

nagog

score 5

前提・実現したいこと

raspberrypi3 で python で書いたプログラムを systemdを使ってos起動時に自動実行させているのですが、そのときにシリアル送信をしており、送信データをprintしてターミナルでも確認していたのですが、自動実行を行った際にはターミナルが立ち上がっておらず、確認できません。

これをどのようにしたら確認できますか?

また、自動実行しているプログラムを停止させるにはどうしたらよいでしょうか?

以上ご教示願います。

該当のソースコード

#!/usr/bin/python
# -*- coding: utf-8 -*-

import  serial
import  time
import  datetime
import  math
import  os
import  RPi.GPIO as GPIO
import  csv

today_now_start = datetime.datetime.today()
today_now = today_now_start 
today_before = today_now_start 
today = datetime.date.today()
count = 0
channel04= 04
channel17= 17
t_delta = datetime.timedelta(0,10,0)
kadoujikan = datetime.timedelta(0,1,0)
t_delta_m = 0
t_delta_s = 0
standard_time = 10
kadouritu = 1
sw = 1
sig  = 'a1000000000000'
sig7 = 'a2234567890123'
sig8 = 'a3876543210987'
sig_a = 'a'
sig_n = '1'
sig_1 = '1234'
sig_1_1 = '32'
sig_1_2 = '54'
sig_2 = '5678'
sig_3 = '9012'



#読込先フォルダ指定
csvfile  = '/home/pi/nas_all/setting.csv'
datareader = csv.reader(file(csvfile, 'r'))
for row in datareader:
    standard_time = int(row[1])
    for date in row:
        print date

# PLC入力パルスONの関数

def PLC_on(channel17):
    global count
    global today_now
    global today_before
    global t_delta
    global count
    global kadoujikan
    global today_start
    global today

    if count == 0:
        today_start = datetime.datetime.today()
        today_now = today_start
    else:
        today_before = today_now
        today_now = datetime.datetime.today()
        t_delta = today_now - today_before
        kadoujikan = today_now - today_start
    count = count +1


# スイッチ入力処理関数
def sw_on(channel04):
    global sig_n
    global sw

    if sw == 3:
        sw = 1
    else :
        sw = sw+1
    sig_n = str(sw)

#GPIOの設定(BCN4 = sw)(BCN17 = PLC)

GPIO.setmode(GPIO.BCM)

GPIO.setup(21, GPIO.OUT)
GPIO.setup(4, GPIO.IN,pull_up_down=GPIO.PUD_UP)
GPIO.setup(channel17, GPIO.IN)

GPIO.add_event_detect(channel17 , GPIO.RISING, callback=PLC_on, bouncetime=300)
GPIO.add_event_detect(channel04 , GPIO.FALLING, callback=sw_on, bouncetime=800)


#シリアル通信の設定

ser= serial.Serial('/dev/ttyUSB0', 9600)
serial.PARITY_EVEN
serial.EIGHTBITS
serial.STOPBITS_TWO

time.sleep(2)

#main

while True:

    #時間測定

    t_delta_m = int((t_delta.seconds)/60)
    t_delta_s = t_delta.seconds-(t_delta_m*60)

    #サイクルタイム算出

    if t_delta_m > 99:
        sig_1 = 'ouer'
    else:
        if t_delta_m < 10:
            sig_1_1 = ' ' + str(t_delta_m)
        else :
            sig_1_1 = str(t_delta_m)
        sig_1_2 = str(t_delta_s).zfill(2)
        sig_1 = sig_1_1 + sig_1_2  

    #稼働率計算
    if count == 0:
        kadouritu = 0
    else :
        kadouritu = (standard_time*(count-1)*100)/(kadoujikan.seconds +  kadoujikan.days * 3600)
    if kadouritu > 9999 :
        sig_2 = 'ouer'
    elif kadouritu < 10 :
        sig_2 = '   ' + str(kadouritu)
    elif kadouritu < 100 :
        sig_2 = '  ' + str(kadouritu)
    elif kadouritu < 1000 :
        sig_2 = ' ' +  str(kadouritu)
    else :
        sig_2 = str(kadouritu)

    #出来高

    if count > 9999 :
        sig_3 = 'ouer'
    elif count < 10 :
        sig_3 = '   ' + str(count)
    elif count < 100 :
        sig_3 = '  ' + str(count)
    elif count < 1000 :
        sig_3 = ' ' +  str(count)

    #送信データ

    sig = sig_a + sig_n + sig_1 + sig_2 + sig_3

    ser.write(sig)
    print sig
    time.sleep(0.1)

GPIO.cleanup()
ser.close()
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

送信データをprintしてターミナルでも確認していたのですが、自動実行を行った際にはターミナルが立ち上がっておらず、確認できません。

syslogに出力するのが簡単、確実です。
参考 : Python で syslog にログ出力するサンプル

自動実行しているプログラムを停止させるにはどうしたらよいでしょうか?

以下の過去質問のようにSIGTERMシグナルハンドラを用意しておけばpkill -f hoge.pyなどのkillコマンド呼び出すだけで安全に終了できます。
参考 : RaspberryPiで動かすPythonプログラムを強制終了した場合

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/09/15 16:23

    ありがとうございました。
    無事解決できました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 91.02%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    raspberrypiのGPIO制御について

    raspberrypiのGPIOを用いて2つのDCモーターの制御を行うためのコードをpythonかcで書きたいです。 ソースコードは落ちてるんですが、pwmoutput.Chang

  • 解決済

    pythonのエラー

    testThreadが見つからないというメッセージが出てきたのですが、どこに問題があるのでしょうか? よろしくお願いします コード #-*- coding utf-8-*-

  • 解決済

    IndentationError: expected an indented block  原因はな...

    Raspberry Pi を使って人感センサーに反応したらiPhoneにお知らせする物を作りたいと思い、調べたところ下記のサイトを発見しました。 https://www.sho-

  • 解決済

    音声出力の途中で画像を更新する方法

    前提・実現したいこと Raspberry Pi3とpythonを用いて画像出力と音声出力を行っています。そしてその音声が5秒間あり、音声出力開始から3秒後に(音声を出力したまま)

  • 解決済

    Pythonのthreadingにおける、終了時の処理

    前提・実現したいこと Pythonを使って、動画や画像を表示するGUIを作っています。その中で、みなさまのご支援を頂ながらカメラの画像を取り込んで再生できるところまで来ました。

  • 解決済

    PythonのFlaskでのrender_templateで画像ファイルの表示方法

    前提・実現したいこと PythonのFlaskのフレームワークを用いて、QRコードを作成して、それを表示させるプログラムを作成しています。(python3) わからないこと QRコ

  • 解決済

    代入演算子を利用した、timedeltaの計算方法

    timedelta型の要素を代入演算子を利用して計算したいのですが、 unsupported operand type(s) for +=: 'int' and 'Timedelt

  • 解決済

    pythonでログの分析(時間)が出来ません。

    前提・実現したいこと pythonのプログラムで質問です。 以下のログがあります。 2012/01/02 13:00 0 2012/01/02 14:00 1 2012/01/

同じタグがついた質問を見る

  • Python

    5533questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • Raspberry Pi

    612questions

    Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。