TaillookTech

iOSアプリ開発してる高専生です.

subprocess.callでPythonからシェルコマンドを叩く

備忘録

import subprocess

subprocess.call('ls -l', shell=True)
subprocess.call(['ls', '-l'])

出力結果は同じ
自動でパースさせる場合にshell=Trueが必要.

ImageSnapを使ってbash上で写真を撮る

はじめに

bashコマンドで写真とか撮れないかなーって探してたらあったので使ってみた.

ImageSnapとは

ImageSnapはWebカメラから画像をキャプチャできるコマンドラインツール.

詳細

github.com

使ってみる

環境

インストール

brewでインストールできる.
brew install imagesnap

ヘルプ

とりあえずimagesnap -h

USAGE: imagesnap [options] [filename]
Version: 0.2.5
Captures an image from a video device and saves it in a file.
If no device is specified, the system default will be used.
If no filename is specfied, snapshot.jpg will be used.
Supported image types: JPEG, TIFF, PNG, GIF, BMP
  -h          This help message
  -v          Verbose mode
  -l          List available video devices
  -t x.xx     Take a picture every x.xx seconds
  -q          Quiet mode. Do not output any text
  -w x.xx     Warmup. Delay snapshot x.xx seconds after turning on camera
  -d device   Use named video device

写真を撮る

imagesnap -q -w 1 snapshot.pngで写真が撮れる.
オプションはqとwを使っている.
qはリザルトとかの出力をなくす.wは写真を撮る時間をコマンド実行時から遅らせる.
今回は1秒遅らせた.(このオプションを付けないと画像が真っ暗になった.レンズのライトが着くタイミングとかなのかな…?)

何秒かごとに写真を撮る.

tオプションを付けることで何秒かごとに写真を撮ることができる.
imagesnap -t 1.00で1秒ごとに写真を撮ることができる.

結果

open snapshot.pngで写真を開く.
f:id:taillook:20170306232438p:plain
こんな感じの写真が撮れた.

感想

後ろに居る人にバレずに写真を撮りたい時とかに使えそう.

MacのsayコマンドとPythonでツイート読み上げスクリプト書いた

経緯

知り合いのオタクがVOCALOID?のゆかり?にツイート読み上げさせてたのでやってみたかった.

実装

ツイッターのストリーミングAPIを使って取得したツイートの内容をPyhtonのsubprocessモジュールでbashのsayコマンドで読み上げさせる.
sayコマンドはOS X独自のコマンドでLinuxとかではGoogleとかの読み上げ機能を使うといいみたい.
sayコマンドで使える音声は色々あってデフォルトではKyokoという女の声.

ha1f-blog.blogspot.jp
ツイッターのストリーミングはこのページのコードを参考にしました.
qiita.com
sayコマンドの使い方はここを参考にしました,

動作

こんな感じの出力が出てKyokoさんが喋ってくれる.
f:id:taillook:20170304185116p:plain

コード

# -*- coding: utf-8 -*-
import tweepy
import subprocess
from datetime import timedelta

#CK = 'XXXXXXXXXXXXXXXXXXXXXX'                             # Consumer Key
#CS = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'         # Consumer Secret
#AT = 'XXXXXXXXX-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' # Access Token
#AS = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'         # Accesss Token Secert

class Listener(tweepy.StreamListener):
    def on_status(self, status):
        status.created_at += timedelta(hours=9)

        print('------------------------------')
        print(status.text)
        print(status.author.name + status.author.screen_name +  unicode(status.created_at) + status.source)
        subprocess.call('say ' + '"' + status.author.name + 'さんのツイート"'.decode('utf-8'), shell=True)
        subprocess.call('say ' + '"' + status.text + '"', shell=True)
        return True

    def on_error(self, status_code):
        print('Got an error with status code: ' + str(status_code))
        return True

    def on_timeout(self):
        print('Timeout...')
        return True

auth = tweepy.OAuthHandler(CK, CS)
auth.set_access_token(AT, AS)

listener = Listener()
stream = tweepy.Stream(auth, listener)
stream.userstream()

bashで syntax error near unexpected token `(' が出た

bashsyntax error near unexpected token `('が出たときの話

bashでsayコマンドで遊んでたら syntax error near unexpected token `('というエラーが出た.
例:say go on the next page(唐突)
このときに引数の文字列をダブルクオーテーションで囲めばいいだけだった.
say "go on the next page(唐突)"

MarkdownにHTMLを埋め込む

概要

いままでMarkdown記法のみしか書けないと思っていたので書く

やり方

そのままMarkdownに直接書いて大丈夫らしい

やってみた

###<ul>
  <li>Swift</li>
  <li>C++</li>
  <li>Python</li>
</ul>

ローカルのGitリポジトリをGitHubの管理下に置く

概要

ローカルで使っているリポジトリGitHubに公開したくなったとき用メモ

手順

  1. GitHubで新しくリポジトリを作る
  2. git remote add origin 作ったリポジトリのURL
  3. git pull origin master
  4. git add .
  5. git commit -m "first commit"
  6. git push origin master

Electronでカラーピッカーを表示するメニューバーアプリを作る

概要

Electronでこんな感じのカラーピッカーを表示するメニューバーアプリを作る.
f:id:taillook:20170224202643p:plain

使ったもの

  • jscolor
    (カラーピッカーを表示するjavascriptライブラリ)
  • menubar
    (Electronでメニューバーアプリケーションを作るライブラリ)

GitHub

Taillook/MenuBar-ColorPicker

コード

main.js

const electron = require("electron");

const app = electron.app;

var menubar = require('menubar')

var mb = menubar()

mb.on('ready', function ready () {})

app.on('window-all-closed', () => {})

var shouldQuit = app.makeSingleInstance((argv, workingDirectory) => {})
if (shouldQuit) app.quit()

index.html

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <script src="jscolor.js"></script>
  </head>
  
  <body>
    Color:<input class="jscolor {hash:true}" value="ab2567">
  </body>
</html>

今回はメニューバーのアイコンしか使わないのでウィンドウの表示はしてないです.