えくすとらんのブログ

jigen2py 更新

パソコンを自動起動させたところ

スクリプトの立ち上がりがあまりにも早く

デスクトップの環境が揃うまでにスクリプトが終わってしまう

ことに気づきました

#!/usr/bin/python3.7
# -*- coding: utf-8 -*-
import datetime
import time
import sys, select
import subprocess as sp
print("しばらくおまちください")
#立ち上がりのウエイト設定
time.sleep(5)
#今日を取得
today = datetime.date.today()
print(today)
print("実行日を更新しますか?(y or notuch is run):  ")
#インプット選択10秒間キー入力がなければマイナス一日
i, o, e = select.select( [sys.stdin], [], [], 10 )

if (i):
    print("input", sys.stdin.readline().strip())
    a = "y"
else:
    print("notuch key")
    a = "n"
if a == "y":
    global b
    global f
    b = input("何日後に設定しますか?:  ")
    print("実行日まであと{}日です".format(b))
    f = open('jigensave.txt','w')
    f.write(b)
    f.close()

elif a == "n":
    f = open('jigensave.txt','r')
    for b in f:
        b = int(b) - 1
        print("実行まであと{}日です".format(b))
        f = open('jigensave.txt','w')
        f.write(str(b))
        f.close()

#実行日を決定
future = today + datetime.timedelta(days=int(b))
#実行日から30日を取得(継続期間)

dur = future  +   datetime.timedelta(days=30)
#継続期間表示
for i in range((dur - future).days + 1):
    jikkou = future + datetime.timedelta(days = i)
    if today < jikkou:
        print(str(jikkou) + ":実行予定です")
    elif today > jikkou:
        print(str(jikkou) + ":過去へ戻ることはできません")
    elif today == jikkou:
        print("実行しました")
       #シェルコマンドを実行
        cmd = "ls "
        sp.call( cmd, shell=True  )
print("実行日でなければ5秒後にソフトをキルします")
#起動後5時間後にPCをシャットダウン
cmd2 = "shutdown -h +300"
sp.call( cmd2, shell=True  )
time.sleep(5)

たちあがりにウエイトをいれてみました
これでも早い場合は数字を変更してみてください
あと...savefileはpyfileと同じ階層にできるといっていたのですがどうやら/home/usrnameの下にできているようですので
一応訂正...ファイル名 .をつけて隠し属性にしたほうがいいのかなぁ?
まあ 必要なら...そのときに...




できた?!jigen2py

昨日の機能にシャットダウン機能を追加しました

#!/usr/bin/python3.7
# -*- coding: utf-8 -*-
import datetime
import time
import sys, select
import subprocess as sp

#今日を取得
today = datetime.date.today()
print(today)
print("実行日を更新しますか?(y or notuch is run):  ")
#インプット選択10秒間キー入力がなければマイナス一日
i, o, e = select.select( [sys.stdin], [], [], 10 )

if (i):
    print("input", sys.stdin.readline().strip())
    a = "y"
else:
    print("notuch key")
    a = "n"
if a == "y":
    global b
    global f
    b = input("何日後に設定しますか?:  ")
    print("実行日まであと{}日です".format(b))
    f = open('jigensave.txt','w')
    f.write(b)
    f.close()

elif a == "n":
    f = open('jigensave.txt')
    for b in f:
        b = int(b) - 1
        print("実行まであと{}日です".format(b))
        f = open('jigensave.txt','w')
        f.write(str(b))
        f.close()

#実行日を決定
future = today + datetime.timedelta(days=int(b))
#実行日から30日を取得(継続期間)

dur = future  +   datetime.timedelta(days=30)
#継続期間表示
for i in range((dur - future).days + 1):
    jikkou = future + datetime.timedelta(days = i)
    if today < jikkou:
        print(str(jikkou) + ":実行予定です")
    elif today > jikkou:
        print(str(jikkou) + ":過去へ戻ることはできません")
    elif today == jikkou:
        print("実行しました")
       #シェルコマンドを実行
        cmd = "ls "
        sp.call( cmd, shell=True  )
print("実行日でなければ5秒後にソフトをキルします")
#起動後5時間後にPCをシャットダウン
cmd2 = "shutdown -h +300"
sp.call( cmd2, shell=True  )
time.sleep(5)



これを一応デスクトップに置いているので

デスクトップエントリーに記述

[Desktop Entry]
Name=jigen2py
Exec=lxterminal -e python3.7 /home/xtoran/Desktop/jigen2.py
Type=Application

を/home/ユーザー名/.config/autostart
にjigen2py.desktopで保存(権限注意)

この設定ではスクリプト起動後5時間後にパソコンがシャットダウンします

えくすとらんの場合はbiostimer設定によって朝5時15分に
ブートしスクリプト初回手動起動30日後にコマンド実行の設定、
キー入力がなければ5時間後にシャットダウン・次の朝
オートでブート。スクリプト起動でキー入力なければ
29日後にコマンド実行と、コマンド実行日をマイナスしていきます
一応これでできたかなぁ^^
倉庫にpyファイルと記述済みデスクトップエントリーをいれておきました

もうすこし...

この前のpythonスクリプトを起動後パソコンのシャットダウンの

方法を考えていたのですが調べてみるといろいろあるようです

cronやatコマンドで時刻を設定する方法などがでてきました

しかし折角なのでスタートアップ登録した自動実行pyに

シャットダウンコマンド(起動時プラス時間で設定しておけば

オッケーなのかもと考えました

まだ実装と実験をしていませんのでうまく行くかどうかわかりませんが

うまくいけば勝手に起動・勝手にシャットダウン・決まった日にコマンド実行となり当初の計画どうりの挙動になるかとおもっています

最近ちょっと気になっているのはクリップボードマネージャ

なのですがもっと簡単に定型文が使えるソフトがあればいいのになぁなんて思っています(スニペットっていうのかなぁ)

クリップボード登録した定型文を右クリックから頭文字で候補出力!(まあえくすとらんにはつくれないでしょうけど・・・)

そんなのあるよって方はぜひ教えてください^^

起動時自動実行py 更新。。

IDEを使っていたため気づかなかったのですが

昨日のスクリプト...実行すると一瞬で消えますね

せっかく実行日が見やすいように考えたのに台無しです

ですので更新です

#!/usr/bin/python3.7
# -*- coding: utf-8 -*-
import datetime
import time
import sys, select
import subprocess as sp

#今日を取得
today = datetime.date.today()
print(today)
print("実行日を更新しますか?(y or no touch):  ")
i, o, e = select.select( [sys.stdin], [], [], 10 )

if (i):
    print("input", sys.stdin.readline().strip())
    a = "y"
else:
    print("no touch")
    a = "n"
if a == "y":
    global b
    global f
    b = input("何日後に設定しますか?:  ")
    print("実行日まであと{}日です".format(b))
    f = open('jigensave.txt','w')
    f.write(b)
    f.close()

elif a == "n":
    f = open('jigensave.txt')
    for b in f:
        b = int(b) - 1
        print("実行まであと{}日です".format(b))
        f = open('jigensave.txt','w')
        f.write(str(b))
        f.close()

#実行日を決定
future = today + datetime.timedelta(days=int(b))
#実行日から30日を取得(継続期間)

dur = future  +   datetime.timedelta(days=30)
#継続期間表示
for i in range((dur - future).days + 1):
    jikkou = future + datetime.timedelta(days = i)
    if today < jikkou:
        print(str(jikkou) + ":実行予定です")
    elif today > jikkou:
        print(str(jikkou) + ":過去へ戻ることはできません")
    elif today == jikkou:
        print("実行しました")
       #シェルコマンドを実行
        cmd = "ls "
        sp.call( cmd, shell=True  )
print("実行日でなければ5秒後にソフトを終了します")

time.sleep(5)

こんな感じ

今回は実行日にシェルコマンドlsが実行されます
実行日でなければ5秒後に自動的に終了します

使い方(例)
  • biosタイマーでpcの起動を設定
  • スクリプトのデスクトップエントリーを作りスタートアップに登録しておく
  • 初回起動は手動で実行し何日後にシェルコマンドを実行させるか入れておく
  • スタートアップから起動されるとオートで”コマンド実行日まであと何日”が減ってゆく(これはスクリプトが実行されるとセーブテキストの”あと何日”の数字が減っていくようになっています。*更新のために手動実行した場合も減ってしまいますので内部処理2日前までに更新しないと手動実行でコマンドが実行されることになります(危険!)
  • 実行日になるとコマンドを実行します

ツッコミどころ満載です(自動でパソコンの電源を切れるように設定しないと意味がないです^^)
まだまだ改良の余地があるのかどうなのかもわかりません
自分で使うだけなのならこれでいいようなきもしています

素人が趣味で作ったものですので使用の際は精査の上自己責任にてお使いください
このソフトを起動させておこったいかなるトラブルにも対処できませんのでよろしくおねがいします


更新がなくなったら○日後自動でコマンド実行  python3

この前のブログではpythonプログラムをスタートアップで

起動する方法を調べてメモさせてもらいました

それもこれも実はいわゆる遺言ソフトといわれるものを

作ってみたかったというのがあって自分にもしものことが

あったときに自動でコマンド..あるいはソフトを起動できたら

いいのになぁとおもっていました

で・・・一応それらしいのを書いてみました

#!/usr/bin/python3.7
# -*- coding: utf-8 -*-
import datetime
import sys, select
import subprocess as sp

#今日を取得
today = datetime.date.today()
print(today)
print("実行日を更新しますか?(y or notuch is run):  ")
i, o, e = select.select( [sys.stdin], [], [], 10 )

if (i):
    print("input", sys.stdin.readline().strip())
    a = "y"
else:
    print("You said nothing!")
    a = "n"
if a == "y":
    global b
    global f
    b = input("何日後に設定しますか?:  ")
    print("実行日まであと{}日です".format(b))
    f = open('jigensave.txt','w')
    f.write(b)
    f.close()

elif a == "n":
    f = open('jigensave.txt')
    for b in f:
        b = int(b) - 1
        print("実行まであと{}日です".format(b))
        f = open('jigensave.txt','w')
        f.write(str(b))
        f.close()

#実行日を決定
future = today + datetime.timedelta(days=int(b))
#実行日から30日を取得(継続期間)

dur = future  +   datetime.timedelta(days=30)
#継続期間表示
for i in range((dur - future).days + 1):
    jikkou = future + datetime.timedelta(days = i)
    if today < jikkou:
        print(str(jikkou) + ":実行予定です")
    elif today > jikkou:
        print(str(jikkou) + ":過去へ戻ることはできません")
    elif today == jikkou:
        print("実行しました")
       #シェルコマンドを実行
        #cmd = "ls "
        #sp.call( cmd, shell=True  )

この設定では○日後から30日間プログロムの実行を試みます

シェルコマンド(subprocess call)
のところはコメントにしてあります
一応 lsなんて書いてみましたがrmやddなどのコマンドを
使うと更新がなくなってから○日後にファイルやフォルダを
消すなんて使い方ができることを想定して作っています
権限あり(shell実行):
sp.call('echo "pass" | sudo -S command',shell=True)

スタートアップで起動するたびに一日づつ実行日が減っていきます 
データセーブの為にテキストファイル(jigensave.txt)
をpyファイルと同じ階層に
吐き出します(中身は”何日後”が数字で入っています。作成のあとは起動のたびにマイナスされる数字を上書きしていきます)

素人がなにもわからずに作っているものですので使用の際は
精査の上お使いください 

またプログラムで起こったいかなるトラブルにも対応できませんのでよろしくおねがいします

自分用メモです

2018・8・20 こうのとり発見!


去年も同じ場所にいたのです。鳥の名前がわからず

たぶんクロトキという鳥だろうと思っていたのですが

なにかちょっとした違和感を覚えもう一度調べて見たところ

これだ!とおもう鳥を見つけました

名前はコウノトリ・名前をよく聞く割に実物は写真も

見たことがない為、羽のさきが黒くて大きなクロトキと

間違えていました よくみるとコウノトリは頭が白く

クロトキは頭が黒いという決定的な違いがありました

ウィキペディアによると日本での野生個体はちょっと昔に

絶滅してしまったらしい ということは

どこかのセンターで飼育放鳥されたものかなと思っていますが

どちらにせよ 野生で見られるのはかなり”レア”な体験です

コウノトリさんはこの場所が気に入っているようで今年も

この辺にやってきてくれました(去年は2匹いたのですが...)

遠くからそっと眺めているのでまたきてくださいね^^


昨日の自動実行を更に自動実行

OS上でスタートアップ登録した自作pyスクリプト

は今の所起動時に問題なく動くことがわかりました

さらにブート自体を自動で行うことができれば

朝起きる→パソコン起動してる→パソコンのソフトも起動してる

→(^^)ニコニコ

ということに・・

調べてみるとbiosからの設定でタイマーブートできるようで

これを使ってみました

とりあえず次の朝に起動するように設定をすませ外出し

夕方帰ってくると....あれれ起動してるぞ

設定を見直してみるとどうやらbiosで動いている時計の時刻

(RTC)が違うようです

更に調べてみるとこの時刻はグリニッジ標準時刻をさして

いるようでしたOS内で使っている時刻はこの時刻に

ローカルタイム補正(Asia/Tokyo +9:00)がかかって

いて日本時間を表示しているようです

お察しのとおりえくすとらんがbiosに設定した時刻は

補正のかかったほうの時間ですので朝起動のはずが真っ昼間に

起動しちまったということのようです

気を取り直してグリニッジ時間で朝起動を設定

今日は朝からパソコンのまえで正座してまちかまえ

動くかどうか確かめてみました

結果は成功!ちゃんと動きました スタートアップも

成功しています

あとはシャットダウンも自動化できれば

電気が止められなければえくすとらんがいなくても

勝手に起動・勝手に

ソフトを起動し勝手に切れるを繰り返すロボットの完成ですね






 久しぶりの更新です 備忘録 使っているarchlinuxにnvidiaのドライバを入れたところドライバがあっていなかったのかxが起動せずこれをアンインストールしたがその後xf86-video-nouveauが入っているにもかかわらずxが起動しなくなったのでarchwikiにて調...