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

'''

0 件のコメント:

コメントを投稿