2021年9月4日土曜日

クリップボード(サーバー&クライアント)漢字

クリップボード(サーバー&クライアント)漢字




testCLIP.py



import win32clipboard as w32c

import time


def monitor(interval_sec, onchange):

    pre_seq = None


    def read():

        try:

            w32c.OpenClipboard()

            return w32c.GetClipboardData()

        except Exception as ex:

            return ex

        finally:

            w32c.CloseClipboard()


    while True:

        seq = w32c.GetClipboardSequenceNumber()


        if pre_seq != seq:

            data = read()

            pre_seq = seq


            onchange(data)


        time.sleep(interval_sec)


def main():

    def onchange(data):

        if isinstance(data, Exception):

            print("Failed:", data)

        else:

            print("Clipboard:", data)

            if data.find("\\u") != -1:

                

                data2=  data.encode('ascii').decode('unicode-escape')

                import pyperclip

                pyperclip.copy(data2)

                

                

                


    monitor(1, onchange)


if __name__ == "__main__":

    import pyperclip


    main()


    """

    s = 'あいうえお'

    b = s.encode('unicode-escape').decode('ascii')

    # //b = s.encode('ascii').decode('ascii')

    pyperclip.copy( b )

    print(b)

    """

    # //text = '\\u30a8\\u30b9'

    # //b = text.encode('ascii').decode('unicode-escape')

    # //b = text.encode('ascii')

    # //pyperclip.copy( b )









2021年8月21日土曜日

mysql ログイン うまくいかない mysqのアンインストールでエラーになってしまた!

 バージョン

root@localhost:~# cat /etc/issue

Ubuntu 14.04.6 LTS \n \l

root@localhost:~# mysql --version
mysql  Ver 14.14 Distrib 5.5.62, for debian-linux-gnu (x86_64) using readline 6.3


ルートのパスワードがわからなくなった場合などは

以下を起動させて、別ターミナルでmysql -u rootをする!

mysqld_safe --skip-grant-tables




ubuntu環境での
mysqのアンインストールでエラーになってしまた!
(最初のremoveでエラー)

エラー内容は、
python-gtk2-dev (2.24.0-3ubuntu3) を設定しています ...
dpkg: パッケージ python-gtk2-dev の処理中にエラーが発生しました (--configure):
 サブプロセス インストール済みの post-installation スクリプト はエラー終了ステータス 1 を返しました
処理中にエラーが発生しました:
 python-gtk2-dev
E: Sub-process /usr/bin/dpkg returned an error code (1)

※エラーの詳細を確認したい場合は、
root@localhost:~# sudo dpkg --audit


アンインストールの手順
---------------------------
sudo apt-get remove --purge mysql-server* mysql-common
sudo apt-get autoremove --purge
sudo rm -r /etc/mysql
sudo rm -r /var/lib/mysql
---------------------------


原因と対応
python-gtk2-devが、ちゃんとインストールされていなかったのかも!
こちらの、2行で「python-gtk2-dev」を削除するとうまくいく

root@localhost:~# rm -rf /var/lib/dpkg/info/python-gtk2-dev.*
root@localhost:~# apt-get remove python-gtk2-dev




以下は、やったログ!



root@localhost:~# sudo apt-get remove --purge mysql-server* mysql-common
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
注意、regex 'mysql-server*' のために 'mysql-server-core-5.0' を選択します
注意、regex 'mysql-server*' のために 'mysql-server-core-5.1' を選択します
注意、regex 'mysql-server*' のために 'mysql-server-core-5.5' を選択します
注意、regex 'mysql-server*' のために 'mysql-server-core-5.6' を選択します
注意、regex 'mysql-server*' のために 'mysql-server-5.0' を選択します
注意、regex 'mysql-server*' のために 'mysql-server-5.1' を選択します
注意、regex 'mysql-server*' のために 'mysql-server-5.5' を選択します
注意、regex 'mysql-server*' のために 'mysql-server-5.6' を選択します
注意、regex 'mysql-server*' のために 'virtual-mysql-server-core' を選択します
注意、regex 'mysql-server*' のために 'mysql-server' を選択します
注意、regex 'mysql-server*' のために 'mysql-server-core' を選択します
注意、regex 'mysql-server*' のために 'virtual-mysql-server' を選択します
Package 'mysql-server-5.1' is not installed, so not removed
Package 'mysql-server-core-5.1' is not installed, so not removed
Package 'mysql-server-5.0' is not installed, so not removed
Package 'mysql-server-core-5.0' is not installed, so not removed
注意、'mysql-server-core' の代わりに 'mysql-server-core-5.5' を選択します
Package 'mysql-server-5.6' is not installed, so not removed
Package 'mysql-server-core-5.6' is not installed, so not removed
以下のパッケージが自動でインストールされましたが、もう必要とされていません:
  libctemplate2 libgtkmm-2.4-1c2a libtinyxml2.6.2 libvsqlitepp3 libzip2
  mysql-utilities mysql-workbench-data python-mysql.connector python-pyodbc
  python-pysqlite2
これを削除するには 'apt-get autoremove' を利用してください。
以下のパッケージは「削除」されます:
  libdbd-mysql-perl* libmysqlclient-dev* libmysqlclient18* libmysqlcppconn7*
  libqt4-sql-mysql* mysql-client-5.5* mysql-common* mysql-server*
  mysql-server-5.5* mysql-server-core-5.5* mysql-workbench* php5-mysql*
  python-mysqldb*
アップグレード: 0 個、新規インストール: 0 個、削除: 13 個、保留: 0 個。
1 個のパッケージが完全にインストールまたは削除されていません。
この操作後に 167 MB のディスク容量が解放されます。
続行しますか? [Y/n] y
(データベースを読み込んでいます ... 現在 172465 個のファイルとディレクトリがインストールされています。)
mysql-server (5.5.62-0ubuntu0.14.04.1) を削除しています ...
mysql-server-5.5 (5.5.62-0ubuntu0.14.04.1) を削除しています ...
mysql-server-5.5 (5.5.62-0ubuntu0.14.04.1) の設定ファイルを削除しています ...
mysql-workbench (6.0.8+dfsg-2) を削除しています ...
mysql-workbench (6.0.8+dfsg-2) の設定ファイルを削除しています ...
mysql-client-5.5 (5.5.62-0ubuntu0.14.04.1) を削除しています ...
libdbd-mysql-perl (4.025-1ubuntu0.1) を削除しています ...
libmysqlclient-dev (5.5.62-0ubuntu0.14.04.1) を削除しています ...
php5-mysql (5.5.9+dfsg-1ubuntu4.29) を削除しています ...
php5_invoke prerm: Disable module mysql for cgi SAPI
php5_invoke prerm: Disable module mysql for cli SAPI
php5_invoke prerm: Disable module mysql for apache2 SAPI
php5_invoke prerm: Disable module mysqli for cgi SAPI
php5_invoke prerm: Disable module mysqli for cli SAPI
php5_invoke prerm: Disable module mysqli for apache2 SAPI
php5_invoke prerm: Disable module pdo_mysql for cgi SAPI
php5_invoke prerm: Disable module pdo_mysql for cli SAPI
php5_invoke prerm: Disable module pdo_mysql for apache2 SAPI
php5-mysql (5.5.9+dfsg-1ubuntu4.29) の設定ファイルを削除しています ...
php5_invoke postrm: Purging state for mysqli for cgi SAPI
php5_invoke postrm: Purging state for mysqli for cli SAPI
php5_invoke postrm: Purging state for mysqli for apache2 SAPI
php5_invoke postrm: Purging state for pdo_mysql for cgi SAPI
php5_invoke postrm: Purging state for pdo_mysql for cli SAPI
php5_invoke postrm: Purging state for pdo_mysql for apache2 SAPI
libqt4-sql-mysql:amd64 (4:4.8.5+git192-g085f851+dfsg-2ubuntu4.1) を削除しています ...
libmysqlcppconn7 (1.1.3-5) を削除しています ...
libmysqlcppconn7 (1.1.3-5) の設定ファイルを削除しています ...
mysql-server-core-5.5 (5.5.62-0ubuntu0.14.04.1) を削除しています ...
python-mysqldb (1.2.3-2ubuntu1) を削除しています ...
libmysqlclient18:amd64 (5.5.62-0ubuntu0.14.04.1) を削除しています ...
libmysqlclient18:amd64 (5.5.62-0ubuntu0.14.04.1) の設定ファイルを削除しています ...
mysql-common (5.5.62-0ubuntu0.14.04.1) を削除しています ...
mysql-common (5.5.62-0ubuntu0.14.04.1) の設定ファイルを削除しています ...
dpkg: 警告: mysql-common の削除中、ディレクトリ '/etc/mysql' が空でないため削除できませんでした
man-db (2.6.7.1-1ubuntu1) のトリガを処理しています ...
shared-mime-info (1.2-0ubuntu3) のトリガを処理しています ...
gnome-menus (3.10.1-0ubuntu2) のトリガを処理しています ...
desktop-file-utils (0.22-1ubuntu1.1) のトリガを処理しています ...
bamfdaemon (0.5.1+14.04.20140409-0ubuntu1) のトリガを処理しています ...
Rebuilding /usr/share/applications/bamf-2.index...
mime-support (3.54ubuntu1.1) のトリガを処理しています ...
menu (2.1.46ubuntu1) のトリガを処理しています ...
libapache2-mod-php5 (5.5.9+dfsg-1ubuntu4.29) のトリガを処理しています ...
libc-bin (2.19-0ubuntu6.15) のトリガを処理しています ...
python-gtk2-dev (2.24.0-3ubuntu3) を設定しています ...
dpkg: パッケージ python-gtk2-dev の処理中にエラーが発生しました (--configure):
 サブプロセス インストール済みの post-installation スクリプト はエラー終了ステータス 1 を返しました
E: Sub-process /usr/bin/dpkg returned an error code (1)

2回目の挑戦!

root@localhost:~# sudo apt-get remove --purge mysql-server* mysql-common
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
注意、regex 'mysql-server*' のために 'mysql-server-core-5.0' を選択します
注意、regex 'mysql-server*' のために 'mysql-server-core-5.1' を選択します
注意、regex 'mysql-server*' のために 'mysql-server-core-5.5' を選択します
注意、regex 'mysql-server*' のために 'mysql-server-core-5.6' を選択します
注意、regex 'mysql-server*' のために 'mysql-server-5.0' を選択します
注意、regex 'mysql-server*' のために 'mysql-server-5.1' を選択します
注意、regex 'mysql-server*' のために 'mysql-server-5.5' を選択します
注意、regex 'mysql-server*' のために 'mysql-server-5.6' を選択します
注意、regex 'mysql-server*' のために 'virtual-mysql-server-core' を選択します
注意、regex 'mysql-server*' のために 'mysql-server' を選択します
注意、regex 'mysql-server*' のために 'mysql-server-core' を選択します
注意、regex 'mysql-server*' のために 'virtual-mysql-server' を選択します
Package 'mysql-server-5.1' is not installed, so not removed
Package 'mysql-server-core-5.1' is not installed, so not removed
Package 'mysql-server-5.0' is not installed, so not removed
Package 'mysql-server-core-5.0' is not installed, so not removed
注意、'mysql-server-core' の代わりに 'mysql-server-core-5.5' を選択します
Package 'mysql-common' is not installed, so not removed
Package 'mysql-server' is not installed, so not removed
Package 'mysql-server-5.5' is not installed, so not removed
Package 'mysql-server-core-5.5' is not installed, so not removed
Package 'mysql-server-5.6' is not installed, so not removed
Package 'mysql-server-core-5.6' is not installed, so not removed
以下のパッケージが自動でインストールされましたが、もう必要とされていません:
  libaio1 libctemplate2 libgtkmm-2.4-1c2a libtinyxml2.6.2 libvsqlitepp3
  libzip2 mysql-client-core-5.5 mysql-utilities mysql-workbench-data
  python-mysql.connector python-pyodbc python-pysqlite2
これを削除するには 'apt-get autoremove' を利用してください。
アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 0 個。
1 個のパッケージが完全にインストールまたは削除されていません。
この操作後に追加で 0 B のディスク容量が消費されます。
python-gtk2-dev (2.24.0-3ubuntu3) を設定しています ...
dpkg: パッケージ python-gtk2-dev の処理中にエラーが発生しました (--configure):
 サブプロセス インストール済みの post-installation スクリプト はエラー終了ステータス 1 を返しました
処理中にエラーが発生しました:
 python-gtk2-dev
E: Sub-process /usr/bin/dpkg returned an error code (1)


以下のコマンドを使用してエラー詳細をみる

root@localhost:~# sudo dpkg --audit
以下のパッケージは最初の設定中に問題が発生したため、設定が終了していません。
dpkg --configure <パッケージ> か dselect で設定 (configure) メニューオプショ
ンを使って設定作業を再試行しなければなりません:
 python-gtk2-dev      GTK+ bindings: devel files

以下のパッケージは、データベース中に md5sums 制御ファイルが見つかりません。
再インストールする必要があります:
 libjson0:amd64       JSON manipulation library (transitional package)

以下の一行で「python-gtk2-dev」の、削除はうまくいかない!
(先ほどと同じ)

root@localhost:~# sudo apt remove python-gtk2-dev
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
以下のパッケージが自動でインストールされましたが、もう必要とされていません:
  libaio1 libctemplate2 libgtkmm-2.4-1c2a libtinyxml2.6.2 libvsqlitepp3
  libzip2 mysql-client-core-5.5 mysql-utilities mysql-workbench-data
  python-mysql.connector python-pyodbc python-pysqlite2
これを削除するには 'apt-get autoremove' を利用してください。
以下のパッケージは「削除」されます:
  python-gtk2-dev
アップグレード: 0 個、新規インストール: 0 個、削除: 1 個、保留: 0 個。
1 個のパッケージが完全にインストールまたは削除されていません。
この操作後に 1,317 kB のディスク容量が解放されます。
続行しますか? [Y/n] y
(データベースを読み込んでいます ... 現在 171934 個のファイルとディレクトリがインストールされています。)
python-gtk2-dev (2.24.0-3ubuntu3) を削除しています ...
dpkg: パッケージ python-gtk2-dev の処理中にエラーが発生しました (--remove):
 サブプロセス インストール済みの pre-removal スクリプト はエラー終了ステータス 1 を返しました
dpkg: クリーンアップ中にエラーが発生しました:
 サブプロセス インストール済みの post-installation スクリプト はエラー終了ステータス 1 を返しました
処理中にエラーが発生しました:
 python-gtk2-dev
E: Sub-process /usr/bin/dpkg returned an error code (1)


root@localhost:~# sudo dpkg --audit
以下のパッケージは最初の設定中に問題が発生したため、設定が終了していません。
dpkg --configure <パッケージ> か dselect で設定 (configure) メニューオプショ
ンを使って設定作業を再試行しなければなりません:
 python-gtk2-dev      GTK+ bindings: devel files

以下のパッケージは、データベース中に md5sums 制御ファイルが見つかりません。
再インストールする必要があります:
 libjson0:amd64       JSON manipulation library (transitional package)

以下の2行だとうまくいく

root@localhost:~# rm -rf /var/lib/dpkg/info/python-gtk2-dev.*
root@localhost:~# apt-get remove python-gtk2-dev
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
以下のパッケージが自動でインストールされましたが、もう必要とされていません:
  libaio1 libctemplate2 libgtkmm-2.4-1c2a libtinyxml2.6.2 libvsqlitepp3
  libzip2 mysql-client-core-5.5 mysql-utilities mysql-workbench-data
  python-mysql.connector python-pyodbc python-pysqlite2
これを削除するには 'apt-get autoremove' を利用してください。
以下のパッケージは「削除」されます:
  python-gtk2-dev
アップグレード: 0 個、新規インストール: 0 個、削除: 1 個、保留: 0 個。
1 個のパッケージが完全にインストールまたは削除されていません。
この操作後に 1,317 kB のディスク容量が解放されます。
続行しますか? [Y/n] y
(データベースを読み込んでいます ... 現在 171882 個のファイルとディレクトリがインストールされています。)
python-gtk2-dev (2.24.0-3ubuntu3) を削除しています ...


「python-gtk2-dev」を再インストールしたら、エラーになった!
(もともと、インストールできていなかったのかもしれません)

root@localhost:~# sudo apt-get --reinstall install python-gtk2-dev
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
以下のパッケージが自動でインストールされましたが、もう必要とされていません:
  libaio1 libctemplate2 libgtkmm-2.4-1c2a libtinyxml2.6.2 libvsqlitepp3
  libzip2 mysql-client-core-5.5 mysql-utilities mysql-workbench-data
  python-mysql.connector python-pyodbc python-pysqlite2
これを削除するには 'apt-get autoremove' を利用してください。
以下のパッケージが新たにインストールされます:
  python-gtk2-dev
アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 0 個。
112 kB 中 0 B のアーカイブを取得する必要があります。
この操作後に追加で 1,317 kB のディスク容量が消費されます。
以前に未選択のパッケージ python-gtk2-dev を選択しています。
(データベースを読み込んでいます ... 現在 171885 個のファイルとディレクトリがインストールされています。)
.../python-gtk2-dev_2.24.0-3ubuntu3_all.deb を展開する準備をしています ...
python-gtk2-dev (2.24.0-3ubuntu3) を展開しています...
python-gtk2-dev (2.24.0-3ubuntu3) を設定しています ...
dpkg: パッケージ python-gtk2-dev の処理中にエラーが発生しました (--configure):
 サブプロセス インストール済みの post-installation スクリプト はエラー終了ステータス 1 を返しました
処理中にエラーが発生しました:
 python-gtk2-dev
E: Sub-process /usr/bin/dpkg returned an error code (1)

こちらの、2行で「python-gtk2-dev」を削除するとうまくいく

root@localhost:~# rm -rf /var/lib/dpkg/info/python-gtk2-dev.*
root@localhost:~# apt-get remove python-gtk2-dev
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
以下のパッケージが自動でインストールされましたが、もう必要とされていません:
  libaio1 libctemplate2 libgtkmm-2.4-1c2a libtinyxml2.6.2 libvsqlitepp3
  libzip2 mysql-client-core-5.5 mysql-utilities mysql-workbench-data
  python-mysql.connector python-pyodbc python-pysqlite2
これを削除するには 'apt-get autoremove' を利用してください。
以下のパッケージは「削除」されます:
  python-gtk2-dev
アップグレード: 0 個、新規インストール: 0 個、削除: 1 個、保留: 0 個。
1 個のパッケージが完全にインストールまたは削除されていません。
この操作後に 1,317 kB のディスク容量が解放されます。
続行しますか? [Y/n] y
(データベースを読み込んでいます ... 現在 171882 個のファイルとディレクトリがインストールされています。)
python-gtk2-dev (2.24.0-3ubuntu3) を削除しています ...



再度実行してみる、できたぞ!

root@localhost:~# sudo apt-get remove --purge mysql-server* mysql-common
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
注意、regex 'mysql-server*' のために 'mysql-server-core-5.0' を選択します
注意、regex 'mysql-server*' のために 'mysql-server-core-5.1' を選択します
注意、regex 'mysql-server*' のために 'mysql-server-core-5.5' を選択します
注意、regex 'mysql-server*' のために 'mysql-server-core-5.6' を選択します
注意、regex 'mysql-server*' のために 'mysql-server-5.0' を選択します
注意、regex 'mysql-server*' のために 'mysql-server-5.1' を選択します
注意、regex 'mysql-server*' のために 'mysql-server-5.5' を選択します
注意、regex 'mysql-server*' のために 'mysql-server-5.6' を選択します
注意、regex 'mysql-server*' のために 'virtual-mysql-server-core' を選択します
注意、regex 'mysql-server*' のために 'mysql-server' を選択します
注意、regex 'mysql-server*' のために 'mysql-server-core' を選択します
注意、regex 'mysql-server*' のために 'virtual-mysql-server' を選択します
Package 'mysql-server-5.1' is not installed, so not removed
Package 'mysql-server-core-5.1' is not installed, so not removed
Package 'mysql-server-5.0' is not installed, so not removed
Package 'mysql-server-core-5.0' is not installed, so not removed
注意、'mysql-server-core' の代わりに 'mysql-server-core-5.5' を選択します
Package 'mysql-common' is not installed, so not removed
Package 'mysql-server' is not installed, so not removed
Package 'mysql-server-5.5' is not installed, so not removed
Package 'mysql-server-core-5.5' is not installed, so not removed
Package 'mysql-server-5.6' is not installed, so not removed
Package 'mysql-server-core-5.6' is not installed, so not removed
以下のパッケージが自動でインストールされましたが、もう必要とされていません:
  libaio1 libctemplate2 libgtkmm-2.4-1c2a libtinyxml2.6.2 libvsqlitepp3
  libzip2 mysql-client-core-5.5 mysql-utilities mysql-workbench-data
  python-mysql.connector python-pyodbc python-pysqlite2
これを削除するには 'apt-get autoremove' を利用してください。
アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 0 個。
root@localhost:~# 
root@localhost:~# 
root@localhost:~# 
root@localhost:~# 
root@localhost:~# sudo apt-get autoremove --purge
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
以下のパッケージは「削除」されます:
  libaio1* libctemplate2* libgtkmm-2.4-1c2a* libtinyxml2.6.2* libvsqlitepp3*
  libzip2* mysql-client-core-5.5* mysql-utilities* mysql-workbench-data*
  python-mysql.connector* python-pyodbc* python-pysqlite2*
アップグレード: 0 個、新規インストール: 0 個、削除: 12 個、保留: 0 個。
この操作後に 18.7 MB のディスク容量が解放されます。
続行しますか? [Y/n] y
(データベースを読み込んでいます ... 現在 171882 個のファイルとディレクトリがインストールされています。)
libaio1:amd64 (0.3.109-4) を削除しています ...
libaio1:amd64 (0.3.109-4) の設定ファイルを削除しています ...
libctemplate2 (2.2-4ubuntu3) を削除しています ...
libctemplate2 (2.2-4ubuntu3) の設定ファイルを削除しています ...
libgtkmm-2.4-1c2a:amd64 (1:2.24.4-1ubuntu1) を削除しています ...
libgtkmm-2.4-1c2a:amd64 (1:2.24.4-1ubuntu1) の設定ファイルを削除しています ...
libtinyxml2.6.2:amd64 (2.6.2-2) を削除しています ...
libtinyxml2.6.2:amd64 (2.6.2-2) の設定ファイルを削除しています ...
libvsqlitepp3:amd64 (0.3.12-1ubuntu1) を削除しています ...
libvsqlitepp3:amd64 (0.3.12-1ubuntu1) の設定ファイルを削除しています ...
libzip2 (0.10.1-1.2) を削除しています ...
libzip2 (0.10.1-1.2) の設定ファイルを削除しています ...
mysql-client-core-5.5 (5.5.62-0ubuntu0.14.04.1) を削除しています ...
mysql-utilities (1.3.5-2) を削除しています ...
mysql-workbench-data (6.0.8+dfsg-2) を削除しています ...
dpkg: 警告: mysql-workbench-data の削除中、ディレクトリ '/usr/share/mysql-workbench/libraries/workbench' が空でないため削除できませんでした
python-mysql.connector (1.1.6-1) を削除しています ...
python-pyodbc (3.0.6-2) を削除しています ...
python-pysqlite2 (2.6.3-3) を削除しています ...
libc-bin (2.19-0ubuntu6.15) のトリガを処理しています ...
man-db (2.6.7.1-1ubuntu1) のトリガを処理しています ...
hicolor-icon-theme (0.13-1) のトリガを処理しています ...
root@localhost:~# 
root@localhost:~# 
root@localhost:~# 
root@localhost:~# 
root@localhost:~# sudo rm -r /etc/mysql
root@localhost:~# sudo rm -r /var/lib/mysql
root@localhost:~# 
root@localhost:~# 


2021年8月8日日曜日

npdb 変数表示

 '''

最初だけ

有効かを

チェックする


'''


"""

     流れを見てみる

"""

def dbg():

   data = list( globals() )

   val  ={}


   for key in data:

      print("key=",key)

      if key != "__builtins__":

         data= globals()[key]


         val[ key ] = data


   return val


namae = input("名前を入力して下さい")

jyusyo= input("住所を入力して下さい")


"""

デバッグの変数内容

"""



print( dbg())

while True:

    food= input("好きなたべものを入力して下さい")

    if food == "":

        break


print("名前は",namae)

print("住所は",jyusyo)

print("好きな食べ物は",food)

print("")

              

print("プログラム終了しました")


2021年8月1日日曜日

動画編集ソフトの自作(開発日誌)1

本日は、ウインドウを見つけて、ウインドウのタイトルを変更した。

opencvで ウインドウでタイトルを変更したかったが(漢字ファイル名の表示)

出来なかったので、回避策!

かなりの時間を費やした、人生の無駄な時間ですね!

でも執念深くやっていると思いつくものがあったですね

win32でウインドウ表示後に変更してしまえば良いじゃないか!

マウスイベントの処理をやりたかったので、 cv2.namedWindow(        winName,   cv2.WINDOW_NORMAL)

も必要だった。

タイトルに文字は、設定されて表示されているが、文字化けをする

が、

cv2.namedWindowの引数のウインドウ名とcv2.imshowの名前を文字化けのままでも、

マウスイベントは、うまく処理してくれる。

その後に、win32でウインドウのタイトルを変更してみた、

うまくできた、嬉しかった。

早く回避策を考えれば良かった(いやタイトルバーに漢字を使わなくてもそれほど問題は無いのだけど、性分で時間を費やしてしまった。(いかん、いかん、いけない!)


俯瞰の目

俯瞰の目がないのです。
反省、反省、反省です


でも、何故できないか何故?

調べたら、

コード体系がUnicodeなく、GBK(中国)が使われているとか?

https://en.wikipedia.org/wiki/GBK_(character_encoding)


よくわからないけど。

日本語(Unicode )で渡すと、中国語の漢字が表示されるのかな、

疲れたなぁ!

中国漢字もタイトルバーには、うかく表示されない場合の対処がnet上にはあった、

日本語もこれでいけると期待していたがNGだった。

cv2.imshow(”タイトル”.encode("GBK").decode() )

Unicode(GBK)などエスケープされたバイト列に変換(エンコード)

してからの、

Unicodeなどエスケープされたバイト列を文字列に変換、デコードだけなのだから!


参考URL PythonでUnicodeエスケープされた文字列・バイト列を変換

https://note.nkmk.me/python-unicode-escape/

でも、本当にはよくわからない。

ここまで,です!

2021/08/02 零時になってしまった、早く寝よう!



【例】

実際のファイル名

fn= C:/Users/kobay/MyTool/pad 拡張機能2

タイトルバーの漢字

良く見ると日本の漢字ではない

(中国の漢字ですね「繁体字化か簡体字は判定できないけど」)


opencvも中国には対応しているのかぁ~




class mosaic():

        def __init__( sl, winName="" ):

         import cv2

        import sys,os,time

        #ウィンドウの名前を設定

        # ウインドウ名を指定しないとcallbackしないので注意!

        # //cv2.namedWindow(        winTitleName,   cv2.WINDOW_AUTOSIZE)

        sl.winName = winName

        cv2.namedWindow(        winName,   cv2.WINDOW_NORMAL)

        cv2.setMouseCallback(   winName,   sl.mouseCallback)


 cv2.imshow(  winName,  img )                   # ファイル名がタイトルバーに表示されます



import win32gui

import win32api

import ctypes


handle=0

def setWinTtl( ttl ):

 

    global handle

    

    handle = ctypes.windll.user32.FindWindowW("Main HighGUI class", None)

    win32gui.SetWindowText(handle, ttl )

    win32gui.SetForegroundWindow(handle)

    print("handle,ttl", handle, ttl)

    

def actWin():

    global handle

   

    win32gui.SetForegroundWindow(handle)


iframe内のDOMを操るには?

 WebPageで、iframe内を操作したい場合、

(JavaScript でiframe内のDOM要素の取得、操作方法)


ポイント

・iframeのID取得

・それで、iframe内のID取得

(getContentIDだったかな?!)

コマンドプロンプトの様なもの(ブラウザで実現)

 netpdb(オンラインのパイソンデバッガ)で使う為に、

コマンドプロンプトの様なもの(ブラウザで実現)を作成した。

(入出力ができる)

ソースは、以下である。

2021年7月23日金曜日

Power Automate Desktop(Webページからデータを抽出する)で改行が?!


 郵便番号の検索自動を作ってみた


デバッグの為に、毎回ブラウザを起動するのは疲れる

起動モードを、「実行中のインスタンスに接続する」に変更しました。

(何でアクションは、新しい???を起動するなんだ、???を起動するでいいじゃないですか?)


これで、デバッグしし易くなった。



アクションは、「Webページからデータを抽出する」なんですが、

青い人間の設計なのか(自分の若いときには、そうしたかな)、

Webヘルパーのウインドウが起動されるよ!






ここで、取得した表示位置でマウスを左クリックしてメニューを表示させて「要素の選択」

から「テキスト」を選んで取得したいものを選びました!



ここまでは、すべて順調でしたが。


改行コードが含まれていてうまく変数に入りません!


結論から!

アクションの「テキスト」ー>「テキストの分割」を選ぶとうまくいった

正規表現が使えるようにして、区切り記号を「\r\n」にすればOKだ!




※ここで注意したいのは、マイクロソフトの改行は(NewLine)

\r\nと言う事です。

勿論、「\n\r」じゃないですよ、最後に「\n」ですよ!

(自分の為に強調して書かせてもらいました、因みにコードは(\r\n、0x0D0A)です

UNIXの改行コードはLF

(Macの改行コードはCR)ですね、


Webページから取り出しのほやほやは、これ













最後に、色々検証した画像をはりました!


結論とまとめ!

正規表現を使うと、改行がうまく使える!
但し改行コードは、「\r\n」である。

昔のプリンターのなごりと聞いたことがある、
機械なので、元に復帰してから次の位置(改行)する。
(ラインフィードもあるが、頭が痛くなるのでここまで!)

PADでは、正規表現が使える
・テキストを置換する
・テキストの解析
・テキスト置換

結構いい感じかな!(巨大な会社なので、このくらいは……)














2021年7月18日日曜日

Pythonのリスト型のデータを削除する(delが便利)

指定位置の削除は、pop,delで可能

(0からスタートなので注意!)


*リスト変数名.pop(消したいindex番号)

lst.pop(1)

*すべてクリアは

lst.clear()


*delは便利そうです、すべてクリアは、すべての範囲指定すればできる

del lst[1] 一番目の要素を削除

del lst[:] すべてクリア(括弧内のコロンは、最初~最後の要素を表現します)




以下参考のサンプル

 >>> lst = list( range(5) )

>>> lst

[0, 1, 2, 3, 4]

>>> lst.clear()

>>> lst

[]

>>>

>>>

>>> lst = list( range(5) )

>>> lst

[0, 1, 2, 3, 4]

>>> print( lst.pop(1) )

1

>>> lst

[0, 2, 3, 4]

>>>

>>>


>>> del lst[1]

>>> lst

[0, 3, 4]

>>>

>>> del lst[:]

>>> lst

[]

>>>

>>>

2021年7月8日木曜日

MySQLがハッキングされた!

悪いやつがいる。

公開 2021/04

更新 2021/07

そんなに前ではなかったのですね!

少しでも参考になれば、まだ文章は途中ですが…





MySQLのワードプレスの

 テーブルが消されて、以下のような内容がてテーブルに書かれた!


要約は、9日以内にお金を払え、さもなければテーブルを売り飛ばす!

----------------------------------- + -------------- ----------------- + ------------------ +

| 1 |失われたデータベースを回復してリークを回避するには、http://hn4wg4o6s5nc7763.onionにアクセスし、一意のトークン779fa3e5c3957a62を入力し、必要な量のビットコインを支払って元に戻します。私たちが持っているデータベース:wordpressdb、sandbox、test_db。データベースがダウンロードされ、サーバーにバックアップされます。 9日以内に支払いがない場合は、データベースを落札者に販売するか、それ以外の方法で使用します。このサイトにアクセスするには、Torブラウザを使用していますhttps://www.torproject.org/projects/torbrowser.html | http://hn4wg4o6s5nc7763.onion | 779fa3e5c3957a62 |



-------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ----- + --------------------- + ------------------ +

| 1 |失われたデータベースを回復してリークを回避するには、http://dbrestore.toにアクセスし、一意のトークンc4af6b9ed16e55e2を入力し、必要な量のビットコインを支払って元に戻します。私たちが持っているデータベース:npdb、wordpressdb、sandbox、testDB。データベースがダウンロードされ、サーバーにバックアップされます。 9日以内に支払いがない場合は、データベースを落札者に販売するか、それ以外の方法で使用します。 | http://dbrestore.to | c4af6b9ed16e55e2 |

+ ---- + -------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- --------

+ ---- + -------------------------------------------- -------------------------------------------------- -------------------------------------------------- ------------------------------------------------------------------+-------------------------------+------------------+

|  1 | To recover your lost databases and avoid leaking it: visit http://hn4wg4o6s5nc7763.onion and enter your unique token 779fa3e5c3957a62 and pay the required amount of Bitcoin to get it back. Databases that we have: wordpressdb, sandbox, test_db. Your databases are downloaded and backed up on our servers. If we dont receive your payment in the next 9 Days, we will sell your database to the highest bidder or use them otherwise. To access this site you have use the tor browser https://www.torproject.org/projects/torbrowser.html | http://hn4wg4o6s5nc7763.onion | 779fa3e5c3957a62 |



-----------------------------------------------------------------------------------------------------------------------------------------------------------+---------------------+------------------+

|  1 | To recover your lost databases and avoid leaking it: visit http://dbrestore.to and enter your unique token c4af6b9ed16e55e2 and pay the required amount of Bitcoin to get it back. Databases that we have: npdb, wordpressdb, sandbox, testDB. Your databases are downloaded and backed up on our servers. If we dont receive your payment in the next 9 Days, we will sell your database to the highest bidder or use them otherwise. | http://dbrestore.to | c4af6b9ed16e55e2 |

+----+----------------------------------------------------------------------------------------------------------------------------


コマンド一覧


select user,host from mysql.user;

drop user ユーザー名;

show table status where name='WARNING'

Filmora残念

 本アプリで編集が上手くいかない!!


やはり自作がいいのかな?

途中ですが、

特徴

音声


眠いので寝ます



import cv2


import sys,os,time


import pydub

import simpleaudio




class mySound:

    

    def __init__( self, fn ):

        self.sound0 = pydub.AudioSegment.from_file( fn + ".mp4"  ) 

        self.fn = fn

        

    def play( self, start, end, speed=1 ):

        self.sound  = self.sound0[ start*1000: end*1000 ]

        # //sound.export( fn + ".mp3"  , format="mp3", bitrate="127k")

        # //self.sound.export( fn + ".mp3"  , format="mp3", bitrate="254k")


        playObj = simpleaudio.play_buffer(

            self.sound.raw_data,

            num_channels    = self.sound.channels,

            bytes_per_sample= self.sound.sample_width,

            # //sample_rate=int(sound.frame_rate*2)

            sample_rate=int( self.sound.frame_rate*speed)

        )

        return playObj



    def export( self, start, end ):

        self.sound  = self.sound0[ start*1000: end*1000 ]

        self.sound.export( self.fn + ".mp3"  , format="mp3", bitrate="254k")



    def replay( self, tim ):

        

        self.sound  = self.sound0[ tim*1000:]


        playObj = simpleaudio.play_buffer(

            self.sound.raw_data,

            num_channels    =self.sound.channels,

            bytes_per_sample=self.sound.sample_width,

            # //sample_rate=int(sound.frame_rate*2)

            sample_rate=int(self.sound.frame_rate)

        )

        return playObj

        




def dispInfo( img ):


    dougaTm = frame_num * (1/fps)

    mm = dougaTm /60

    ss = dougaTm %60

    ff = dougaTm %60

    cv2.putText(img, "%02d:%02.02f" %( mm, ss ), (30,30), cv2.FONT_HERSHEY_COMPLEX, 1, (255,0,0), 2, 8)

    cv2.putText(img, "f:%02d" %( frame_num), (30, 60), cv2.FONT_HERSHEY_COMPLEX, 1, (255,0,0), 2, 8)


    cv2.putText(img, "sf:%02d" %( startFrame ), (30, 60+30), cv2.FONT_HERSHEY_COMPLEX, 1, (0,0,255), 2, 8)

    cv2.putText(img, "ef:%02d" %( endFrame ), (30, 60+60), cv2.FONT_HERSHEY_COMPLEX, 1, (255,0,255), 2, 8)

    




def dispWin():


    global playObj,snd,startSec, startTm

    global img,frame_num


    cap.set(cv2.CAP_PROP_POS_FRAMES, frame_num )


    ret, img = cap.read()

    frame_num = cap.get(cv2.CAP_PROP_POS_FRAMES)

    print("frame_num", frame_num)


    # //各情報の表示をおこなう

    dispInfo( img )

    cv2.imshow('Video', img )




startFrame  = 0

endFrame    = 0

playSW      = False

recSW       = False

    

    

    


def procPlay():


    global playObj,snd,startSec, startTm

    global img,frame_num

    global startFrame,endFrame

    global playSW, recSW, stopSW

    

    key = ""

    if endFrame <= frame_num:

            playObj.stop()

            stopSW = True

            playSW = False

            recSW  = False


            while True:

                key = cv2.waitKey(0)

                print("key",key)


                if key & 0xFF == 49:

                    startFrame -= 5

                    print("startFrame=", startFrame )

                    dispWin()

    


                if key & 0xFF == 50:

                    startFrame += 5

                    print("startFrame=", startFrame )

                    dispWin()



                if key & 0xFF == 51:

                    endFrame -= 5

                    print("endFrame=", endFrame )

                    dispWin()


                if key & 0xFF == 52:

                    endFrame += 5

                    print("endFrame=", endFrame )

                    dispWin()



    

                if key & 0xFF == 27:

                    tim = ( (1/fps) * frame_num)

                    startSec = tim

                    startTm =  time.time()


                    playObj = snd.replay( tim )

                    return key

                

                

                if key & 0xFF == ord("p") or key & 0xFF == ord("w") :


                    if key & 0xFF == ord("w") :

                        recSW = True

                    else:

                        playSW = True


                    frame_num = startFrame

                    dispWin()


                    tim = ( (1/fps) * frame_num)

                    startSec = tim

                    startTm =  time.time()


                    playObj = snd.replay( tim )

                    return key

    return key



        

        

def inputKey( key ):

        

    global playObj,snd,startSec, startTm

    global img,frame_num

    global startFrame,endFrame

    global playSW, recSW, stopSW

    

    stopSW = False

    while True:

        if key & 0xFF == ord(" "):

            if stopSW:

                tim = ( (1/fps) * frame_num)

                startSec = tim

                startTm =  time.time()


                playObj = snd.replay( tim )

                return key

            else:

                playObj.stop()

                stopSW = True


        # //開始フレーム、終了フレームの設定

        if key & 0xFF == ord("r"):

            startFrame = frame_num

            print("startFrame=", startFrame )

            return key


        if key & 0xFF == ord("s"):

            endFrame = frame_num

            print("endFrame=", endFrame )

            return key


        # //マークフレームの確認

        if key & 0xFF == ord("p") or key & 0xFF == ord("w") :

            playSW = True

            playObj.stop()

            stopSW = True


            frame_num = startFrame

            dispWin()


            tim = ( (1/fps) * frame_num)

            startSec = tim

            startTm =  time.time()


            playObj = snd.replay( tim )

            return key

            


        if key & 0xFF == ord("b"):

            playObj.stop()

            stopSW = True


            frame_num -= fps+1

            dispWin()


        if key & 0xFF == ord("f"):

            playObj.stop()

            stopSW = True


            frame_num += fps-1

            dispWin()


        if key & 0xFF == 8:

            playObj.stop()

            stopSW = True


            frame_num -= 2

            dispWin()


        if key & 0xFF == 13:

            playObj.stop()

            stopSW = True


            # //frame_num += 2

            dispWin()



        # //再度、キー入力待ちをする

        key = cv2.waitKey(0)

        print("key===",key)

            

    # //dispWin()



def wait( speed=1 ):

    global playObj,snd,startSec, startTm

    global img,frame_num

    

    while True:

        key = cv2.waitKey(1)

        if key & 0xFF == ord("q"):

            return key


        sousaKey = [ord(" "), ord("b"), ord("f"), 

                    ord("r"), 

                    ord("s"), 

                    ord("p"), 

                    ord("w"), 

                    8, 13 ]

        if key in sousaKey:

            key = inputKey( key )

            return key

            

        if playSW or recSW:

            procPlay()



            

        realTm =  time.time() - startTm

        # //print( "time.time()=", time.time() )    

        # //print( "realTm=", realTm )    

        tim = ( (1/fps) * frame_num / speed)

        if startSec + realTm >  tim:

            return key



# //----------------------------------------------------------------

# //ここからスタート

# //----------------------------------------------------------------



fn       = "man"

fn       = "testCap"

startSec = 0

endSec   = 200




#Video Source

cap = cv2.VideoCapture( fn + '.mp4') #自分のmp4のpathを入力


frame_num = cap.get(cv2.CAP_PROP_POS_FRAMES)

fps       = cap.get(cv2.CAP_PROP_FPS)

        



# //出力ファイルの設定

fourcc = cv2.VideoWriter_fourcc( *'mp4v')

ret, img = cap.read()

h, w, channels = img.shape

rec = cv2.VideoWriter('douga.mp4', fourcc, fps, (w, h))




snd = mySound( fn )

playObj = snd.play( startSec, endSec )


startTm =  time.time()


# //0秒は、0フレーム

# //1秒は、25フレーム

# //2秒は、50フレーム

pos =fps * startSec

cap.set(cv2.CAP_PROP_POS_FRAMES, pos )





# //----------------------------------------------------

# //メインループ

# //----------------------------------------------------

while True:


    ret, img = cap.read()

    frame_num = cap.get(cv2.CAP_PROP_POS_FRAMES)


    # //終了秒数

    tm        = frame_num /fps

    if tm >= endSec:

        break


    # //各情報の表示をおこなう

    dispInfo( img )


    cv2.imshow('Video', img )

    

    if recSW:

        img_out = img.copy()

        rec.write(img_out)

        print("rec!")



    key = wait( )

    if key & 0xFF == ord("q"):

        snd.export( startFrame, endFrame )

        break


    # //フレームの移動(前に戻る)

    if key & 0xFF == ord("b"):

        frame_num -= 1

        cap.set(cv2.CAP_PROP_POS_FRAMES, frame_num )

        dispInfo( img )




rec.release()

# //playObj.stop()





sys.exit()








# //------------------------------------------------

# //ここでは、動画と音声の結合です

# //------------------------------------------------


import ffmpeg


def concat():


    # //print("concat-1")

    fn_in = "douga"

    fn_in2= "man"

    fn_out ="douga_out.mp4"


    # //print("concat-2")

    if os.path.isfile( fn_out ):

        # //print("concat-3")

        os.remove( fn_out )

    # //print("concat-4")



    instream1= ffmpeg.input( fn_in  + ".mp4")    # video

    instream2= ffmpeg.input( fn_in2 + ".mp3")    # sound


    #コーデックと出力ファイル

    stream = ffmpeg.output( instream1, instream2, fn_out, vcodec="copy", acodec="copy")

    ffmpeg.run(stream,  quiet=True)




concat()






sys.exit()




while True:

    ret, img = cap.read()

    img = cv2.resize(img, (frameWidth, frameHeight))

    cv2.imshow('Video', img)

    # //print('ret=', ret)


    # qを押すと止まる。

    if cv2.waitKey(50) & 0xFF == ord('q'):

        break


2021年5月2日日曜日

自動化の為のパイソン超入門(原案)

 ***********************************************

自動化の為のパイソン超入門


プログラミングが未経験でも大丈夫です


***********************************************



$

---------------------------------------------------------------

プログラムは簡単です

---------------------------------------------------------------

自動化をやりたいけれど、

プログラミング未経験者に見てもらいたい動画です


プログラミングは奥が深いので、すべてを理解して

十分に使いこなすのは大変ですが、

自動化の為だけならば簡単に楽しくできます



$

---------------------------------------------------------------

自動化をする


プログラミング初心者でもOK

---------------------------------------------------------------

自動化には、いろいろなアプリがあります、

今回は、Python言語を利用します

プログラミングが初めてでも大丈夫ですよ!

fこの動画を見てパイソンもマスタしてくださいね


スクリプトを作成するとも言います。

スクリプトは、上から順番に命令を実行していくものです


$

---------------------------------------------------------------

プログラムとは、どんなものか?

---------------------------------------------------------------

プログラムとは、どのようなものでしょうか?

プログラミングするとは、どんなことでしょうか?

プログラミングとは、

メモ帳などで日記を書くようにして作成します


書く内容は、英語でも日本語でもなく

プログラミング言語で書きます


今回は、パイソンという言語で書きます

そして、コンピュータに読ませて実行させます





$

---------------------------------------------------------------

動画(スクリプトの流れ)

---------------------------------------------------------------

実際には、このような感じになります

1行がコンピュータにやらせる命令です

誰でも、簡単に作成できます



$

---------------------------------------------------------------

準備する

インストールする

---------------------------------------------------------------

パイソンでプログラミングするには、準備が必要です

fインストールをするのですね!


インストールは、別動画がありますので、

そちらを見てくださいね

注意したいのは、32、64ビットかを指定する

そして、パスです


$

---------------------------------------------------------------

関数を使う

変数に代入

ループさせて、待ち

---------------------------------------------------------------

今回の内容は、

関数を使う

変数、そして

ループさせて待たせるです


このような内容を理解すれば、自動化することができます




$

---------------------------------------------------------------

変数に代入

---------------------------------------------------------------

変数とは、一時的に数字や文字列を保存しておける

ものです

名前を付けることができます

f変数名といいます




$

---------------------------------------------------------------

変数を参照する

---------------------------------------------------------------

変数は、実行中は分かりません、

printを利用してみます

また、デバッガ等を使うしかありません

fネットのnpdを使うのもいいですね!

はい、URLを書いておきますね


fこれがプログラミングを難しくしているのですね!

はい、


fどのような場合に使いますか?

主に関数の引数やif文の条件です




$

---------------------------------------------------------------

動画

変数を参照する

---------------------------------------------------------------

では、メニューの座標位置を調べます

flocateOnScreenを使うのですね!


はい、返却されますので変数に代入します

そしてマウスポインタを移動させます

引数に返却された変数を渡せばOKです

fマウスポインタの移動は、moveToを使うのですね




$

---------------------------------------------------------------

動画

変数を参照する

---------------------------------------------------------------



$

---------------------------------------------------------------

自動化の為の関数


返却値=ある関数(引数を指定)


---------------------------------------------------------------

では、実際に関数を使って見ましょう

関数の使い方は、このような感じです


関数名を書いて、その関数に値を渡すことができます



$

---------------------------------------------------------------

実際の関数の使い方


moveTo(引数)

---------------------------------------------------------------

では、実際にみてましょう

moveToは、マウスポインターの位置を変更させるものです

引数には、x,yの座標を与えます

座標の基準点は、左上になります

fそこが、xが0,yが0なのですね

左に行けば、x値が増えて、下に行けば、y値が増えます

返却値はありません



$

---------------------------------------------------------------

実際の関数の使い方


座標と大きさ=locateOnScreen(引数)

---------------------------------------------------------------

今度は、返却値のある、locateOnScreenという関数です

引数には、画像を渡します

関数を呼び出すと、現在の画面上の引数画像にマッチする

位置情報などを返します


$

---------------------------------------------------------------

動画


---------------------------------------------------------------




$

---------------------------------------------------------------

ループさせる(無限ループ)


while true:

print("ループ中")

---------------------------------------------------------------

ループさせるには、whileを使います

ループさせたい内容は、字下げします



$

---------------------------------------------------------------

ループさせる(無限ループ)


while true:

print("ループ中1")

print("ループ中2")

print("ループ中3")


print("ループ中4")


---------------------------------------------------------------

ループさせたい内容が複数行ある場合は、

同様に字下げします


字下げされていない、printは、whileから抜けた

場合に表示されます


この場合は、無限にwhileを行います

f無限ループになっているのですね!

これは、プログラムとしておかしいですね

fバグですね!



$

---------------------------------------------------------------

ループから抜ける


while true:

print("ループ中1")

if 条件:

break


print("ループから抜けました")


---------------------------------------------------------------

ループから抜けたい場合は、

if文を使います

書き方は、if 条件式、コロン、字下げをして

breakと書きます



$

---------------------------------------------------------------

ifの条件式の書き方


 変数名 == 10

 変数名 == "15"


 変数名 != 10

 変数名 != "15"


 変数名 >= 10


---------------------------------------------------------------

条件式の書き方は、例題のようになります

イコールが2つで、同じ場合

ビックリ、イコールで違う、



$

---------------------------------------------------------------

ループさせる(回数)


ix = 0

while true:

print( "ix=", ix)

if ix==3:

Break

---------------------------------------------------------------

指定回数ループする方法です。

変数を使い、変数を+1してループ回数をアップさせていきます

if文でループ終了の回数を指定すれば、whileから抜けられます


$

---------------------------------------------------------------

ループさせる(条件)


while true:

xy = locateOnScreen( img )

print( "xy=", xy)

if xy != None:

Break

---------------------------------------------------------------

今度は、画像の位置が取得できたら

ループ終了してみます

locateonscreenと言う関数で、返却値がNoneでなくなるまで

ループします

ループから抜けたら、取得座標値を表示してみます