

ラズパイのGPIO（16）でスイッチONの時に  
AWSのIoT経由でメールを飛ばそうと考えているのですが、  
下のPythonプログラムの `mosquitto_pub ~` の行で「SyntaxError: invalid syntax」が出ます。  
初歩的なコトかも知れませんが、不具合箇所をご指摘いただきたく、よろしくお願いします。  
ちなみに、ラズパイで直接コマンド入力で、同一文（`mosquitto_pub ・・・・・ -m 'Hello,
World'`）を入力すると正常にメール送信されます。

[code]

    #!/usr/bin/python
    # coding: utf-8
    
    # モジュールをインポートする
    import RPi.GPIO as GPIO
    import time
    
    # GPIO指定をGPIO番号で行う
    GPIO.setmode(GPIO.BCM)
    
    # GPIO16ピンを入力モードに設定
    GPIO.setup(16, GPIO.IN)
    
    num = 0
    while num < 10:
        print (GPIO.input(16))  # GPIO16ピンの入力状態を表示する
        if GPIO.input(16) == 1 :
            mosquitto_pub --cafile rootCA.pem --cert ～～～～～～～-certificate.pem.crt --key ～～～～～～～-private.pem.key -h ～～～～～～～.amazonaws.com -p 8883 -q 1 -d -t topic/sns -m 'Hello, World'
        num = num +1
        time.sleep(1)
    print ("End")
    
    # GPIOピンをリセット
    GPIO.cleanup()
    
[/code]


CC BY-SA 3.0
2017-07-31T07:48:41.200
36813
2017-08-01T08:33:03.477
2017-07-31T08:17:58.450
19110
23890
question
python
AWSのIoT経由でメール（mosquitto_pub）


Python
のプログラムと、シェルに打ち込む[コマンド](https://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89_\(%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF\))とを混同なさっています。

[code]

    mosquitto_pub --cafile rootCA.pem --cert ～～～～～～～-certificate.pem.crt --key ～～～～～～～-private.pem.key -h ～～～～～～～.amazonaws.com -p 8883 -q 1 -d -t topic/sns -m 'Hello, World'
    
[/code]

というのは `mosquitto_pub` という実行ファイルに `--cafile rootCA.pem`
など様々なオプション引数をつけた上で実行するという、シェルのコマンドです。これをそのまま Python のプログラムとして打ち込んでも上手く動きません。

外部実行ファイルを Python から動かすためには、たとえば標準ライブラリの [subprocess
モジュール](https://docs.python.jp/3/library/subprocess.html)が使えます。以下は Python 3.5
以降で可能な書き方です。

[code]

    import subprocess
    subprocess.run(["mosquitto_pub", "--cafile", "rootCA.pem", （省略）])
    
[/code]

バージョン 3.5 より古い Python
では、[`subprocess.call`](https://docs.python.jp/3.4/library/subprocess.html)を使う方法があります。

[code]

    import subprocess
    subprocess.call("mosquitto_pub", "--cafile", "rootCA.pem", （省略）])
    
[/code]


CC BY-SA 3.0
2017-07-31T12:09:32.303
36822
2017-08-01T08:33:03.477
2017-08-01T08:33:03.477
19110
19110
36813
answer