えくすとらんのブログ: xtoran
ラベル xtoran の投稿を表示しています。 すべての投稿を表示
ラベル xtoran の投稿を表示しています。 すべての投稿を表示

python3で畑で使う施肥量計算機ちょっとつくってみた





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

#施肥量計算
class Sehi:
    def __init__(self,kg,N,P,K):
        self.kg = kg
        self.N = int(N)*10
        self.P = int(P)*10
        self.K = int(K)*10

    def seibunryou(self):
        seibunryou_N = int(self.kg) * int(self.N)
        seibunryou_P = int(self.kg) * int(self.P)
        seibunryou_K = int(self.kg) * int(self.K)
        print("一袋あたり"+ "(N)"+ str(seibunryou_N)+"g"+"(P)"+str(seibunryou_P)+"g"+"(K)"+str(seibunryou_K)+"g")

#施肥データ
class Yasai:
    def __init__(self,name,hasyu,uetsuke,sehin,sehip,sehik,oigoe):
        self.name = name
        self.hasyu = hasyu
        self.uetsuke = uetsuke
        self.sehin = sehin
        self.sehip = sehip
        self.sehik = sehik
        self.oigoe = oigoe

    def yasai_data_load(self):
        print("******************************************")
        print("品名: "+ self.name)
        print("播種時期: "+ self.hasyu)
        print("植え付け時期: "+ self.uetsuke)
        print("施肥量(N)(kg/10a): "+ str(self.sehin))
        print("施肥量(P)(kg/10a): "+ str(self.sehip))
        print("施肥量(K)(kg/10a): "+ str(self.sehik))
        print("追肥の目安(npk)(kg/10a): "+ self.oigoe)

    def m_change(self):
        mcn = int(self.sehin)/10
        mcp = int(self.sehip)/10
        mck = int(self.sehik)/10
        print("******************************************")
        print("1rあたりの施肥量は")
        print("N: "+ str(mcn)+ "kg")
        print("P: "+ str(mcp)+ "kg")
        print("K: "+ str(mck)+ "kg")

kabocya = Yasai("かぼちゃ","3月下旬","4月下旬",15,15,15,"20 10 15")
kyuri = Yasai("きゅうり","5月上旬","5月下旬",30,30,30,"20 0 10")
suika = Yasai("すいか","4月中旬","6月中旬",10,10,10,"10 5 5")
meron = Yasai("メロン","3月上旬","4月上旬",15,20,15,"- - -")
tomato = Yasai("トマト","3月中旬","5月中旬",15,25,10,"15 0 10")
piman = Yasai("ピーマン","2月上旬","4月中旬",25,25,20,"20 20 15")
ichigonae = Yasai("イチゴ苗床","7月上旬","-",1,3,2,"(kg/a)")
ichigo = Yasai("イチゴ","7月上旬","9月上旬",15,20,20,"10 5 5")
nasu = Yasai("なす","3月上旬","5月中旬",30,30,30,"15 10 15")
okura = Yasai("オクラ","2月上旬","3月下旬",30,30,30,"15 10 15")
nira = Yasai("にら","12月上旬","4月上旬",12,25,15,"30 0 19")
miendou = Yasai("実えんどう","9月下旬","-",5,20,10,"10 0 5")
sayaendou = Yasai("さやえんどう","8月上旬","-",6,25,10,"7 0 9")
ingen = Yasai("いんげん","8月中旬","-",14,20,20,"0 0 0")
toumorokoshi = Yasai("とうもろこし","3月下旬","-",30,30,25,"6 0 7")
gobou = Yasai("ごぼう","3月上旬","-",14,25,16,"8 0 6")
rakkyou = Yasai("らっきょう","9月上旬","-",8,20,10,"5 0 5")
rifuretasu = Yasai("リーフレタス","9月下旬","10月下旬",20,20,20,"-")
kekkyuretasu = Yasai("結球レタス","7月下旬","8月下旬",25,25,25,"-")
daikonn = Yasai("大根","9月上旬","-",15,20,12,"10 0 10")
bareisyo = Yasai("じゃがいも","1月下旬","-",17,20,18,"8 0 0")
satoimo = Yasai("さといも","4月上旬","-",14,23,12,"6 0 8")
kansyo = Yasai("かんしょ","3月上旬(種芋定植)","5月上旬",5,12,15,"-")
ninjin = Yasai("にんじん","8月上旬","-",15,20,15,"5 0 5")
syouga = Yasai("しょうが","4月中旬","-",20,20,20,"10 10 10")
shishitou = Yasai("ししとうがらし","1月上旬","3月下旬",20,20,20,"25 15 15")
nigauri = Yasai("にがうり","3月下旬","4月下旬",20,16,20,"13 8 11")
burokkuri = Yasai("ブロッコリー","8月中旬","9月下旬",15,20,15,"10 5 10")
soramame = Yasai("そらまめ","8月上旬","10月上旬",15,15,15,"5 5 5")
kyabetsu = Yasai("キャベツ","9月下旬","11月上旬",15,15,15,"10 5 10")
hakusai = Yasai("はくさい","9月下旬","11月上旬",15,15,15,"10 5 10")
hourensou = Yasai("ほうれん草","9月上旬","-",10,10,10,"5 0 5")
syungiku = Yasai("春菊","8月下旬","-",15,15,10,"10 0 10")
konegi = Yasai("小ねぎ","4月上旬","-",15,10,15,"25 15 20")
tamanegi_ikubyou = Yasai("玉ねぎ(育苗)","-","-",0.5,0.5,0.5,"(kg/50m2)")
tamanegi = Yasai("玉ねぎ","9月上旬","10月下旬",15,20,15,"10 5 5")

sehidetas=[kabocya,kyuri,suika,meron,tomato,piman,ichigonae,ichigo,
             nasu,okura,nira,miendou,sayaendou,ingen,toumorokoshi,gobou,
             rakkyou,rifuretasu,kekkyuretasu,daikonn,bareisyo,satoimo,
             kansyo,ninjin,syouga,shishitou,nigauri,burokkuri,soramame,
             kyabetsu,hakusai,hourensou,syungiku,konegi,tamanegi_ikubyou,
             tamanegi]

def yasainame():
    print("施肥量データが選ばれました。野菜を選んでください。")
    for i,v in enumerate(sehidetas):
        print(i,v.name)
def yasai_sentaku():
    print("**********************************************")
    yasainum = input("野菜の番号を入力してください: ")
    try:
        sehidetas[int(yasainum)].yasai_data_load()
        sehidetas[int(yasainum)].m_change()
        print("**********************************************")
        print("*元肥,追肥のデータだけです(堆きゅう肥,苦土石灰,よう燐は土壌状態に合わせ別途用意する必要があります)")
    except IndexError:
        print("選択範囲にない値です.")
        yasai_sentaku()
     




#袋の総量及び成分含有率入力 
def fukuro():
    print("袋の成分量を計算します")
    fukuro_kg = input("袋の総量を入力してください(kg): ")
    fukuro_N = input("窒素含有率を入力してください(N): ")
    fukuro_P = input("リン酸含有率を入力してください(P): ")
    fukuro_K = input("カリ含有率を入力してください(K): ")
    fukuro = Sehi(fukuro_kg,fukuro_N,fukuro_P,fukuro_K)
    fukuro.seibunryou()
 
#メイン処理

syori = input("処理を選んでください: 1: 施肥量計算 2: 施肥量データ: ")


def hatake():
    if syori == str(1):
        fukuro()
        input()

    elif syori == str(2):
        yasainame()
        yasai_sentaku()

     

hatake()
input()



 ソースに書いてあるとおり元肥,追肥のデータだけです(堆きゅう肥,苦土石灰,よう燐は土壌状態に合わせ別途用意する必要があります

あと播種期,定植期も一般的な露地物のものとしていますが(春夏二度のものもあります)
地域差.農業スタイルや気温によってもかわります
あくまで参考程度で...

自分の環境はlinuxです 
ソースをメモ帳にコピペで名前にnpk.pyをつけて
実行権限をつけて同じ階層でpython npk.pyしてやってください

brotherprinterがarchlinuxで使えなくなったが使えるようになった話

ハードディスクを換装しあたらしいarch環境でブラザー製の複合機の

プリンター機能を使いたくセッティングした

詳しくはこちらを参考にさせてもらった

いざプリントしてみるとcupsも正常に起動しネットワークプリンターもcupsから見えている状態
接続にAppSocket/HP JetDirect
socket://192.168.○.○:9100 を設定
テストページを印刷してみるとジョブも正常終了するがプリンターが動かない

こちらで書いておられるようにlib32-glibc(multilibをpacman.confにて設定必要)

をインストールしcupsを再起動

sudo systemctl restart org.cups.cupsd.service

もう一度設定し直してみると今度は無事にテストページを印刷した



一応...備忘録





パソコンの挙動がおかしかったのでマザーボードの電池交換

ポンコツなのはパソコンか自分か?

ダントツにコスパの良い旧型中古自作PCをくみあげた

ちなみに今使っているのは当時1300円のLGA775マザーボードに

core2quadをとりつけたもの

最近 なぜかパソコンの挙動がいたるところでおかしかった

症状はタスク処理中に固まってしまったり異常に起動がおそくなったり

アクセスランプが点きっぱなしになったりとか....

疑ったのはソフト、メモリ、ハードディスク、マザーボードなどだ

作業途中にハードディスクが回りっぱなしになったりしていたのでハードディスクも

うたがっていたのだが他のパソコンに換装してみるとうまくうごいているようだ

メモリ関係でトラブルがでることもある

デュアルチャンネルで動かす場合などメモリ同士の相性などで誤作動する場合が

あるし挿し方が悪いとこれも原因となったことがある

ということで一応一本挿しにしてみたり違うものを使ってみたりしたのだがやはり

おかしい

着眼したのはbiosの立ち上がりが悪くなっていたことで

biosがメモリを読み込んだあとにデバイス周りのよみこみがおそかった

これはもうマザーボード交換時期なのかとおもっていたのだが

とりあえず最後の望みとしてcmosクリアと電池交換してみたところ

いまのところ非常に快適にうごいている

マザーボードも中古品を使うので次から組み上げる際に電池交換をまめに

しておこうとひそかにおもったのであった....



lxdeの仮想デスクトップの数を増やす(自分用備忘録)

備忘禄

環境はarchlinux

デフォルトの枚数が2枚になったのかな?

/home/usrname/.config/openbox/xde-rc.xml

<desktops>
  <number>3</number>(数字変える)
  <name>desktop 3</name>(名前を追加)
</desktops>

保存 logout→login

でいいとおもう



よくわからないもの




import time as tm
import hashlib
a = 1
b = []
while a <= 10:
    tm.sleep(1)
    b.append([a])
    c = str(b)
    hash=hashlib.sha256(c.encode('utf8')).hexdigest()
    a+=1
    print(b)
    print(hash,b[-1],len(b))


フィーリングだけで作ってみた
(理解ができなかったので...)

1〜10までの数字をカウント
ループが回るたびに1ずつ増える変数aをbに追加
そのつどbをハッシュ化
ハッシュされたデータと現在の最後のカウント数、データの長さを出力





おや いつのまにやらなおってた

管理者権限でpcmanfmを開くと

ログアウトがまともにできなる現象がいつの間にやら直ってた

.....なにかしたのかなぁ

それともアップデートでなおったのかな

wheelグループの設定変えたような 変えなかったような
ほかにもなにかしたかなぁ...覚えてないや
まぁ直ったからよしとしよう

ホームページは軽いほうがいいなぁ

某巨大企業のニュースサイトを開いたところ.....

読み込みまでの時間がかかりすぎて見る前に閉じてしまった

そのあと謎の通信障害....

いったいなにを埋め込んでいるのだろう

最新の技術を使い見栄えの良いものになっているのだろうが

トップページの読み込みが遅いと(まぁパソコンは4世代前なんですが...)

なにがしらか悪い予感するので

まぁほぼ閉じます

個人的にはトップページは静的サイトのほうが好きだなぁ

なんでそんなに重くなってしまうのか本当に不思議だ....




ひさしぶりー 


ipアドレスでプロバイダーのホスト局が特定できるのって
セキュリティー的にはどうなのかって昔からおもってる
たしかに中継局なので個人の特定はできないとしても
田舎では少し変わった行動をしたことをブログやHPに書き込めば
アドレスから個人を特定されてしまうのではないかと感じている
確かにVPNやプロクシをつかえばアドレスが変わるので
それを使えばって話なのだが
プロバイダ側でそういった配慮が今までないのはどうだろうと
感じる
なによりブラウザのキャッシュを削除してからのHP閲覧で
いきなり地域の広告がHPに所狭しと出るのは気持ちが悪いの
一言だ
うーんプロバイダーなら自社の中継サーバーを1つ2つ回して(なんならランダムに...)
セキュアな
環境を提供することができそうなのにね

まぁ素人の言ってることなので....


ひとりごと nazeni arch

私の環境ではなぜだかこの間からpcmanfmをsudo起動すると

一般ユーザモード?(スタートメニューの電源メニューにシャットダウン. リブートが消える)

に落とされたあげくログアウトボタンでXクラッシュ

なんてことになってしまう

いろいろ調べてみて(xdg関係やusrs,suders,やらetc...)

いたが結局わからず直らなかったまあバグなんかだったら

アップデートで直るかもなどともおもいlxdeから

ほかのwmを使ってみることに

まずはopenboxこれはlxdeを抜いていなければそのまま

lxdmから選んで起動できたがやはりsudo でpcmanfmを起動すると

lxdmの画面が出てこない

なんだかちょっと凹んできたのでlxde自体をアンインストール

これで同梱されていたlxdmやpcmanfmなどが消えた


 
再起動後ログインするとカーソルは出ていない

xorgがうまくはいっていればstartxとコマンドをうてば

標準搭載のターミナル3つの画面がたちあるはず

一応これでもぜんぜんいいんだけど...

普段づかいなのでやっぱりちょっとアプリランチャーとかデスクトップとかほしい

ということで dwm jwm uwmなどをつぎつぎと試してみる

デスクトップマネージャをいれていないので

startx の自動起動に~/zloginを作って

[[ -z $DISPLAY && $XDG_VTNR -eq 1 ]] && exec startx

を記述

あとは各wmをひとつづつxinitrcに書いて起動させてみた

まあみんな軽くてよかった

chromiumbook作るならこんな感じで

つくるとよさそう.....

jwmにxfce4-panelなどをつけてみたりしてみたが

結局これなら普通にxfceいれたほうがいいなってことになって

DMにlightdmをいれてxfceを起動で落ち着きました



その際少し気づいたことですが

DMがない場合

xinitrcにfcitxを登録して起動させても

うまくmozcが動かなかった(なぜか直接入力というのができなかった)

DMをいれたらうまくfcitx-mozcをつかうことができた

まあ支離滅裂な文章ですがこんなもんで....(うゎてきとーTT)

またね








wmをメインとサブにわけてみた

普段使い(主にインターネット閲覧)には
openboxを使用
作業用にはconpiz+LXDEで使用
って感じにしてみた

違いはデスクトップを視覚的に使うかどうかと
スピードで
openboxでは開いてすぐにchromiumを開いて
使うようなときに...(ですのでこちらは余計な常駐プログラムなどは
極力起動させないようにします)
conpiz+lxdeではいろいろ開いて仮想デスクトップ
まで使った作業をするときになどに
DM(lxdm)にて切り替えて使うことにしました

ふだんはopenboxが増えてゆくかも...





pythonでRssリーダーを作ってみました

easyguiでRssフィーダーを作ってみました

OSはarchlinuxです
ワンファイルで起動します
テキストにコピー&ペーストで.pyファイルを作って
権限与えて実行してください

RSSのURLをいれて選ぶとニュースヘッドラインがならびます
気に入ったニュースを選ぶと標準ブラウザを立ち上げ
詳細を知ることができます

初回起動時'/home/user/Desktop/feedurl.txt'を作ります
*userはusernameですのでパスは好きなところに変えてください
RssのURLはテキストとしてどんどん上書き保存されます
がテキストファイルですのでいらなくなったら消したり
編集したりできるかと思います
なんとなくICEFEEDと名付けてみました

自動更新をつけるためにtimeをimportしていますが未実装です
ゆえに手動更新です
作成途中ですので割当のないボタンが存在しているかもしれません
へたの横好きですのでこのプログラムによって起こったいかなる
問題にも対処できませんのでよろしくおねがいします


#!/usr/bin/env python3.7
# -*- coding: utf-8 -*-
#import pdb; pdb.set_trace()
import feedparser
import easygui as ez
import webbrowser
import time
def main():
#RSsurlinput
    feed = ez.enterbox("rss,rdfのURLを入れてください","rssfeed")
#Rssfeedsave
    f = open('/home/user/Desktop/feedurl.txt','a')
    f.write(feed+ "\n")
    f.close()
#Rssfeedload
    f = open('/home/user/Desktop/feedurl.txt')
    line = f.read()
    lines1 = line.split("\n")
    f.close()
#feedURLchoice
    msg ="What is your feedurl?"
    title = "Ice feed"
    choices = []
    for i in lines1:
        choices.append(i)
    choice = ez.choicebox(msg, title, choices)
    rss = choice
    dic = feedparser.parse(rss)
    news = []
    for entry in dic.entries:
        title = entry.title
        link = entry.link
        news.append([title,link])
#newschoice
    choice = ez.choicebox(dic.feed.title,"RSS",news)
    front_page = choice.split(",")[1]
    url = front_page.lstrip(" ").rstrip("]").lstrip("'").rstrip("'")
#browseropen
    webbrowser.open(url, new=2, autoraise=True)
if __name__ == "__main__":
    main()


こんな感じになりました
やっぱり自動更新いるかなぁ....^^;

archupdateでカーネルバージョンアップが失敗する

カーネルアップデートするとエラーが出て

キーボード.マウスの入力を受け付けなくなる

問題ではどうやらcpioでの作成が

うまく行ってなかったのかなとおもう

アップデートの際
initramfs-linux-*.img
initramfs-linux-*-fallback.img
vmlinuz-linux*

というファイルが/bootにできているようですが

このファイルと実際のカーネルバージョンが違うと

エラーになるのかなぁ

なので...カーネルアップデートでエラーが出る場合は
(私の場合はインストールディスクを使ってchrootからやっています)


boot以下の
initramfs-linux-*.img
initramfs-linux-*-fallback.img
vmlinuz-linux*

を削除
もういちどカーネルとヘッダーをインストール
たぶんこの時点でmkinitcpioが行われているとおもうのだけれど失敗の場合は
mkinitcpioを手動で起動
新しく
initramfs-linux-*.img
vmlinuz-linux*
initramfs-linux-*-fallback.img


を作ればよいのではないかとおもっています(実行される方は自己責任にてお願いします えくすとらんは記事の実行によって起こったいかなるトラブルにも対処できません)

なぜアップデート時にimgやvmlinuzの作成が失敗するようになってしまったのか?とかどうやればもとに戻るのかなどと
疑問が残りますがひとまずカーネルアップデートはこの方法で最新にできるかなぁ








jigen2_4更新

  • コマンド実行日取得後の実行期間が30日はちょっとながいので7日くらいにしてみました(30日表示されると実行日が見えなかったので)
...このへんの設定はコンフィグファイルsave.txt作って直接編集にしたほうがよいのかもしれませんねぇ(編集可能な数値としてはsavetxtフォルダ階層情報・コマンド実行までの期間・実行日取得からの実行期間・起動してからのシャットダウンまでの時間.sudopass.シェルコマンド等...)

なんの計画もなしおもうがままにつくったので関数.classなども
使ってないですね(オブジェクト無思考・・・)
やはり関数など作っておくと後々”戻る”処理をするとき便利なのかもしれませんねぇ
次から考えてみよう...(直さないのか?)

今日はすずしくなったなぁ...






jigen2_3更新


とりあえず自分の環境ではうまく動作しているようですが

少し改良したほうが良さそうなところをみつけましたので

なおしてみました

  • saveファイルの場所をきちんと記述しました(どうやらちゃんとかかないと起動の仕方によってファイルの作成場所がかわってしまうようです(デフォルトはデスクトップにしてありますので任意の場所をopen関数各所フルパスで記述していただけるとよいかとおもいます
  • 初回起動時notuchだとセーブファイルがないのでエラーがでるようなので例外処理をいれてみました
起動のたびにコマンド実行日が近くなりますのでお気をつけください
倉庫に一応いれておきました



どうかな...





自分専用jigenpy

jigen2pyを

外付けデバイス削除専用で更新してみました

ddコマンドでゼロ埋め処理をする(のはず)ようにしたので

デバイス名や実行日の入力を間違えると非常に危険です

55行目のsudopassをいれてください

デフォルトでsdb1が削除対象です

*実はまだ試していないのでコマンドが正常動作するのかどうなのかわかっていません(試すと今つけている外付けデバイスの中身がすべて消えるので他デバイスを用意しないと
だめですね^^;)

一応倉庫にjigen2_1.pyでおいてあります

えくすとらんはこのスクリプトによって起こったいかなる
トラブルにも対処できませんのであしからず...












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ファイルと同じ階層に
吐き出します(中身は”何日後”が数字で入っています。作成のあとは起動のたびにマイナスされる数字を上書きしていきます)

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

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

自分用メモです

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