Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

waitInputConfirm関数の例外について #480

Closed
snozawa opened this issue Feb 12, 2015 · 9 comments
Closed

waitInputConfirm関数の例外について #480

snozawa opened this issue Feb 12, 2015 · 9 comments

Comments

@snozawa
Copy link
Contributor

snozawa commented Feb 12, 2015

waitInput.pyのwaitInputConfirm関数の結果(OKかcancelか)で、
cancelが押されたときに例外がraiseされるようになっているのはなぜでしょうか。
https://github.com/fkanehiro/hrpsys-base/blob/master/python/waitInput.py#L7

例えばhrpsys_configなどの利用例をみると、
https://github.com/fkanehiro/hrpsys-base/blob/master/python/hrpsys_config.py#L1519
OKならTrue, cancelならFalseをreturnするようにしても良いように見受けられますが、あってますでしょうか。

ロボット体内などdisplayがないところでも、外部PCなどdisplayがあるところでも
うごくようにプログラムをかこうとして、「displayがないところ」かどうかの判定を
waitInputConfirmからの例外判断しようとして、ふと思いました。

よろしくお願いいたします。

@k-okada
Copy link
Contributor

k-okada commented Feb 12, 2015

hiroでは
https://github.com/start-jsk/rtmros_hironx/blob/hydro-devel/hironx_ros_bridge/src/hironx_ros_bridge/hironx_client.py#L603
としています.体内でpythonは走らせていない気がしますが,riaseされたものをcatchしているのかな

Cc: @130s

◉ Kei Okada

2015-02-12 22:53 GMT+09:00 Shunichi Nozawa [email protected]:

waitInput.pyのwaitInputConfirm関数の結果(OKかcancelか)で、
cancelが押されたときに例外がraiseされるようになっているのはなぜでしょうか。
https://github.com/fkanehiro/hrpsys-base/blob/master/python/waitInput.py#L7

例えばhrpsys_configなどの利用例をみると、

https://github.com/fkanehiro/hrpsys-base/blob/master/python/hrpsys_config.py#L1519
OKならTrue, cancelならFalseをreturnするようにしても良いように見受けられますが、あってますでしょうか。

ロボット体内などdisplayがないところでも、外部PCなどdisplayがあるところでも
うごくようにプログラムをかこうとして、「displayがないところ」かどうかの判定を
waitInputConfirmからの例外判断しようとして、ふと思いました。

よろしくお願いいたします。


Reply to this email directly or view it on GitHub
#480.

@snozawa
Copy link
Contributor Author

snozawa commented Feb 13, 2015

ありがとうございます。
hrpsys_config.pyと基本的には同じになってますね。

お伺いしたいものとしては、
A.
この部分で、

try:
   waitInputConfirm
except:
   xxx

となっている部分が

if waitInputConfirm():
   yy
else:
   xx

のように返り値+if文だと問題ありますでしょうか。
OKボタン、cancelボタンの結果を取得するのに、例外をraiseしてcatchすることにしているのは何か理由ございますでしょうか。

B.
そもそもAの質問の意図としましては、OKかcancelかを例外+catchでなくて返り値+if文でとるようにすると、
例外+catchを他の用途(体内でdisplayがない)で使えるのでは、と思いました。
もともとやりたかったことは、displayのない体内でもdisplayのある体外でも、両方pythonが動くようにする、でした。
pythonでdisplayがあるかないか、のif文がかければAをしなくても目的が達成されます。
(ちょっとpythonなれしておらず、displayがあるかどうかのif文がぱっとでてこない状況でした)

@fkanehiro
Copy link
Owner

例外となっている理由はGrxUIの仕様と合わせるためです。
なぜ例外にしたのかは川角さんに聞いてみないとわからないですね。

2015-02-13 17:52 GMT+09:00 Shunichi Nozawa [email protected]:

ありがとうございます。
hrpsys_config.pyと基本的には同じになってますね。

お伺いしたいものとしては、
A.
この部分で、

try:
waitInputConfirm
except:
xxx

となっている部分が

if waitInputConfirm():
yy
else:
xx

のように返り値+if文だと問題ありますでしょうか。
OKボタン、cancelボタンの結果を取得するのに、例外をraiseしてcatchすることにしているのは何か理由ございますでしょうか。

B.
そもそもAの質問の意図としましては、OKかcancelかを例外+catchでなくて返り値+if文でとるようにすると、
例外+catchを他の用途(体内でdisplayがない)で使えるのでは、と思いました。
もともとやりたかったことは、displayのない体内でもdisplayのある体外でも、両方pythonが動くようにする、でした。
pythonでdisplayがあるかないか、のif文がかければAをしなくても目的が達成されます。
(ちょっとpythonなれしておらず、displayがあるかどうかのif文がぱっとでてこない状況でした)


Reply to this email directly or view it on GitHub
#480 (comment)
.

@snozawa
Copy link
Contributor Author

snozawa commented Feb 13, 2015

わかりました。
手元ではpopenで調べるようにして解決しました。

        xp=os.popen("xset q 2>&1 | grep unable");
        display_available = (xp.read()=='')
        xp.close()

ありがとうございました。

@snozawa snozawa closed this as completed Feb 13, 2015
@k-okada
Copy link
Contributor

k-okada commented Feb 13, 2015

ディスプレイがないと waitInputConfirm でerrorがraiseされるから,A)でも動くんじゃないかな.

◉ Kei Okada

On Fri, Feb 13, 2015 at 6:58 PM, Shunichi Nozawa [email protected]
wrote:

Closed #480 #480.


Reply to this email directly or view it on GitHub
#480 (comment).

@snozawa
Copy link
Contributor Author

snozawa commented Feb 13, 2015

displayがないなら無いなりの挙動になってほしいですが,そうならないと思います.

例えば,displayがない体内のような場合にYかNを端末に打ち込むようにする,というのを試してみます.
今のservoOnの箇所の

try:
    waitInputConfirm(\
           '!! Robot Motion Warning (SERVO_ON) !!\n\n'
           'Confirm RELAY switched ON\n'
           'Push [OK] to switch servo ON(%s).' % (jname))
except: # ths needs to change
    self.rh_svc.power('all', SWITCH_OFF)
    xxxx # ここが追加部分です
    raise

のxxxに端末に打ち込むような処理をいれるということだと思いますが,

  1. displayがなくてかつxxxを実行したいときに,そのうえの処理が強制的に行われてしまう.上記ではpowerOffされる.
  2. displayがあってかつcancelボタンを押した時に,xxxのようないらない処理が行われてしまう.

となって,結局cancelボタンが押されたexceptionとdisplayがないexceptionがごっちゃになるので,
処理するのが難しそうに思います.
(1はneeds to changeとかいてあり,みたかんじいらなさそうですが,2の問題は残ります)

@k-okada
Copy link
Contributor

k-okada commented Feb 13, 2015

あああ,displayがない場合,というのは,もうy/nを聞かずに進める,というのがhiroでの使い方だった気がします.
足があるとやっぱy/nは聞きたいわけですね.なるほど.

◉ Kei Okada

2015-02-14 1:29 GMT+09:00 Shunichi Nozawa [email protected]:

displayがないなら無いなりの挙動になってほしいですが,そうならないと思います.

例えば,displayがない体内のような場合にYかNを端末に打ち込むようにする,というのを試してみます.
今のservoOnの箇所の

try:
waitInputConfirm(
'!! Robot Motion Warning (SERVO_ON) !!\n\n'
'Confirm RELAY switched ON\n'
'Push [OK] to switch servo ON(%s).' % (jname))
except: # ths needs to change
self.rh_svc.power('all', SWITCH_OFF)
xxxx # ここが追加部分です
raise

のxxxに端末に打ち込むような処理をいれるということだと思いますが,

  1. displayがなくてかつxxxを実行したいときに,そのうえの処理が強制的に行われてしまう.上記ではpowerOffされる.
  2. displayがあってかつcancelボタンを押した時に,xxxのようないらない処理が行われてしまう.

となって,結局cancelボタンが押されたexceptionとdisplayがないexceptionがごっちゃになるので,
処理するのが難しそうに思います.
(1はneeds to changeとかいてあり,みたかんじいらなさそうですが,2の問題は残ります)


Reply to this email directly or view it on GitHub
#480 (comment)
.

@snozawa
Copy link
Contributor Author

snozawa commented Feb 13, 2015

あああ,displayがない場合,というのは,もうy/nを聞かずに進める,というのがhiroでの使い方だった気がします. 足があるとやっぱy/nは聞きたいわけですね.なるほど.

そうですね.それプラス,displayがない場合はwaitInputConfirmでぬけちゃうので,y/n聞かずに進まず,servoOn自体からexceptで抜けてしまいます.

@k-okada
Copy link
Contributor

k-okada commented Feb 14, 2015

ユーザに聞くか,あるいは強制的にすすめるか,どちらにしたらいいかは難しいですね.
dashboardみたいにスクリプト(プログラム)からservoonするなら強制でいい気がしますし.
ユーザからインタプリタ的に使うなら聞きたい気がしますし.

ということで,元々の @snozawa の提案でいい気がしてきました.

◉ Kei Okada

2015-02-14 1:42 GMT+09:00 Shunichi Nozawa [email protected]:

あああ,displayがない場合,というのは,もうy/nを聞かずに進める,というのがhiroでの使い方だった気がします.
足があるとやっぱy/nは聞きたいわけですね.なるほど.

そうですね.それプラス,displayがない場合はwaitInputConfirmでぬけちゃうので,y/n聞かずに進まず,servoOn自体からexceptで抜けてしまいます.


Reply to this email directly or view it on GitHub
#480 (comment)
.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants