2021年4月25日日曜日

PyAutoGui(Linux上)

 Linux上で、自動実行させるには、いくつかの大切な事があったのでメモメモ



・ウインドウ操作は、xdotoolを利用

・これを動かすには、subprocess.check_outputを使う


参考

xdotool コマンド全26実例 CONSOLE DOT LOG カナダLOVE!なフリーランス・プログラマーのブログ!

subprocessについてより深く(3系,更新版)


import PySimpleGUI as sg


from subprocess import *

from pyautogui import *

from time import sleep



print(size())

print(position())

Popen("gedit")

sleep(1)


o=check_output("xdotool search --name '\u7121\u984c' windowmove 1 1",shell=True)

sleep(1)

print(o)

sleep(1)

moveTo(100,200)

sleep(1)

click()

sleep(1)

#write("abc")

hotkey("ctrl","q")

#press("enter")

#hotkey("alt","c")





numbers = range(1, 6)


# 非インタラクティブ(communicate()を用いて一度にすべて送信)

p = subprocess.Popen(['python', 'calc.py'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

# 改行コードで連結

str_nums = '\n'.join(map(str, numbers))

o, e = p.communicate(input=str_nums.encode())

print(o.decode())


'''

n    = 1

 + 2 = 3

 - 3 = -2

 * 4 = 4

 / 5 = 0.2

'''


# インタラクティブ(.stdin.write()を駆使して一行ずつ送信)

p = subprocess.Popen(['python', 'calc.py'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

for n in numbers:

    # 数字を送る

    p.stdin.write(str(n).encode())

    # 改行を送る(input()に対しての入力なので必須)

    p.stdin.write('\n'.encode())

    # バッファの解放(大事)

    p.stdin.flush()

    # 結果を一行読む(複数行にわたる場合はwhile文を使う)

    print(p.stdout.readline().decode().strip())


'''

n    = 1

 + 2 = 3

 - 3 = -2

 * 4 = 4

 / 5 = 0.2

'''

操作の自動化の為の、パイソンのインストール(その他)

2021年4月11日日曜日

MySQL エラーになる(何でだ)、起動エラーの原因とパスワードの再設定

 しばらく、サーバー上のMySQLを利用していなかった。

Welcome to Ubuntu 14.04.6 LTS (GNU/Linux 2.6.32-042stab128.2 x86_64)

 * Documentation:  https://help.ubuntu.com/

New release '16.04.7 LTS' available.

Run 'do-release-upgrade' to upgrade to it.




久しぶりteraから、mysqlを起動したら、エラーになってしまった

結論

・エラー内容(Can't connect to local MySQL server through socket

・落ちていたようだ!

・起動できない

 →ソケットファイルを削除(/var/run/mysqld/mysqld.sock)

・起動できたが、パスワードのエラー(パスワードが替えられたか?)

・パスワードを再設定した

$mysqld --skip-grant-tables

$mysql -u root mysql

$mysql> UPDATE user SET Password=PASSWORD('my_password') where USER='root';

$mysql> FLUSH PRIVILEGES;

・新しいパスワードでログインができた、めでたしめでたし!













  Can't connect to local MySQL server through socket '/tmp/mysql.sock'

起動してみたら、エラーになった


ソケットファイルを削除した

rm mysqld.sock


確認 etc/mysql/my.cnfのファイルを確認する

/etc/mysql/my.cnf  ファイル内のsocketの場所


 [client]

 port= 3306

 socket= /var/run/mysqld/mysqld.sock


起動できたみたい

oot@localhost:/etc/mysql# /etc/init.d/mysql status

mysql start/running, process 13672

root@localhost:/etc/mysql# /etc/init.d/mysql stop

mysql stop/waiting


root@localhost:/etc/mysql# /etc/init.d/mysql start

mysql start/running, process 11391

root@localhost:/etc/mysql# /etc/init.d/mysql status

mysql start/running, process 11391



一応、立ち上がったが…

ルートのパスワードで立ち上がらない

パスワードの再設定をしたよ

$mysqld --skip-grant-tables

$mysql -u root mysql

$mysql> UPDATE user SET Password=PASSWORD('my_password') where USER='root';

$mysql> FLUSH PRIVILEGES;



参考URL

https://superuser.com/questions/603026/mysql-how-to-fix-access-denied-for-user-rootlocalhost

147

Follow the steps below.

  1. Start the MySQL server instance or daemon with the --skip-grant-tables option (security setting).

    $ mysqld --skip-grant-tables
    
  2. Execute these statements.

    $ mysql -u root mysql
    $mysql> UPDATE user SET Password=PASSWORD('my_password') where USER='root';
    $mysql> FLUSH PRIVILEGES;
    

If you face the unknown field Password error above use:

update user set authentication_string=password('my_password') where user='root';
  1. Finally, restart the instance/daemon without the --skip-grant-tables option.

    $ /etc/init.d/mysql restart
    

You should now be able to connect with your new password.

$ mysql -u root -p

Enter password: my_password