質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Android Debug Bridge(ADB)

Android Debug Bridge(ADB)は、接続された端末をAndroidエミュレータもしくはAndroidのインスタンスにアクセスに接続するためのツール。端末アクションをサポートし、様々なコマンドの実行の際に用いられるUnixシェルへのアクセスを提供します。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

184閲覧

Pythonの中でadbを使うと標準出力されていたものが突然されなくなった

Nehalem

総合スコア1

Android Debug Bridge(ADB)

Android Debug Bridge(ADB)は、接続された端末をAndroidエミュレータもしくはAndroidのインスタンスにアクセスに接続するためのツール。端末アクションをサポートし、様々なコマンドの実行の際に用いられるUnixシェルへのアクセスを提供します。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2024/03/10 17:35

編集2024/03/11 03:37

実現したいこと

python3 ssm3Driver.py Get 'Sesame3' 'LockCurrentState' と実行すると画面内から取得した色に応じて標準出力をしたい

発生している問題・分からないこと

pullした時にprint()の中身以外の標準出力されるのが嫌で、https://qiita.com/zophos/items/2d3aee100eb4f17bd147
を参考にして書き直したコードを実行して以来、コードを元に戻しても標準出力がされなくなった。
引数から何まですべて同じつもりが、pullのログからprint()の中まで一つも出力されることなく終わる。

エラーメッセージ

error

1何もありませんでした

該当のソースコード

import sys import os import pathlib import cv2 import time def get_pixel_color(x, y): os.system('adb shell screencap -p /sdcard/screen.png') os.system('adb pull /sdcard/screen.png') # 画像を読み込む image = cv2.imread('./screen.png') # 特定のピクセル位置を定義 pixel = (x,y) # そのピクセルの色を取得 # OpenCVでは色がBGRの順で格納されているので、RGBに変換する必要がある場合は注意 b, g, r = image[pixel[1], pixel[0]] # RGB範囲を定義 # 2つのRGB範囲を定義 secured_min = (194, 64, 58) secured_max = (214, 84, 78) unsecured_min = (30, 164, 167) unsecured_max = (50, 184, 187) # 色が指定した範囲内にあるかどうかを判定 in_secured = secured_min[0] <= r <= secured_max[0] and secured_min[1] <= g <= secured_max[1] and secured_min[2] <= b <= secured_max[2] in_unsecured = unsecured_min[0] <= r <= unsecured_max[0] and unsecured_min[1] <= g <= unsecured_max[1] and unsecured_min[2] <= b <= unsecured_max[2] print (r, g, b) if in_secured: #print (0) return '0' elif in_unsecured: #print (1) return '1' else: #print (3) return '3' # adbから鍵の状態を読み取る。 def get_status(): chara = sys.argv[3] if chara == 'lockCurrentState': print(get_pixel_color(850, 380)) # 状態を変更し、statusを書き換える def set_status(): i = 0 chara = sys.argv[3] value = sys.argv[4] print(value) if chara == 'lockTargetState': while value != get_pixel_color(850, 380) and i < 5: os.system('adb shell input tap 850 385') i += 1 time.sleep(2) print('success') if __name__ == "__main__": get_status() if sys.argv[1] == 'Get': get_status() elif sys.argv[1] == 'Set': set_status() sys.exit()

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

・コード内で実行しているadbコマンドはコマンドライン上からは実行できている
・コマンドラインからpython3を起動してos.system('adb shell input tap 850 385')の一行だけを実行することもできている

補足

Ubuntu 22.04.4 LTS
Python 3.10.8

追記

実行時の環境は、初期ユーザの状態でssm3Driver.pyファイルがあるディレクトリで、python3 ssm3Driver.py Get 'Sesame3' 'LockCurrentState' と実行しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TakaiY

2024/03/11 00:52

このスクリプトはどのように実行していますか。 実行時の引数も含めて質問に追記おねがいします。
Nehalem

2024/03/11 03:38

コメントありがとうございます。質問を修正したのでご確認よろしくお願いいたします。
guest

回答2

0

python3 ssm3Driver.py Get 'Sesame3' 'LockCurrentState'

他のところ見てませんが、このコマンドで実行している場合、画像の6行目部分は必ず なのでは?

(この画像は、適当に抜粋して実行しています。)
イメージ説明

画像中の main に書いたprintは以下になります。

argv[1] : [Get] argv[1] : ['Sesame3'] argv[1] : ['LockCurrentState']

ついでですが、

python

1 get_status() 2 3 if sys.argv[1] == 'Get': 4 get_status()

この部分は、引数が Get の場合、 get_status() を2回やることになりそうですが、何か意味があるんですか?

投稿2024/03/11 04:11

FiroProchainezo

総合スコア2401

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Nehalem

2024/03/11 04:25

おっしゃる通りで、Lを大文字に変更するよりも前まで戻してしまったために引きおこったものでした。ありがとうございます また、Getを二回行っているのは普通にミスです、すみません💦
guest

0

自己解決

コードを戻した際に戻しすぎていたせいで引数が間違っていたようでした。
お騒がせしました

投稿2024/03/11 04:08

Nehalem

総合スコア1

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問