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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

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

Q&A

解決済

2回答

405閲覧

pythonで常に入力を受け取れるようにする

muno

総合スコア12

Python 3.x

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

0グッド

1クリップ

投稿2019/03/24 06:39

現在,PythonでFXの自動取引ツールの作成を試みています.
mainでループ処理は大まかに以下のようになっています

while(1): 現在価格を取得 if 条件: 注文関係の処理

コマンドラインからendという文字列を与えることによってこのループから抜けて
取引を終了するような形にしたいのですが,inutを使うと入力を受け取るまで他の処理が止まってしまいます.

常に入力を受け取れる状態にしておきつつも他の処理を止めないようにするためにはどうしたらよいでしょうか?

よろしくお願いします.

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

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

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

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

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

guest

回答2

0

ベストアンサー

プログラムを止めるなら、Ctrl-C を押せば良いのですが。

標準入力から入力があるのかをチェックすれば良いでしょう。

Python

1import select 2import sys 3 4while 1: 5 現在価格を取得 6 if 条件: 7 注文関係の処理 8 inp,_,_ = select.select([sys.stdin],[],[],0) 9 if inp: 10 if input()=="end": 11 break

と思ったのだけど、Windowsだと、selectでエラーになります。

スレッドを分けて、入力専用のスレッドを作るのでしょうか。

Python

1import threading 2 3loop_cond=True 4 5def end_check(): 6 global loop_cond 7 while loop_cond: 8 if input()=="end": 9 loop_cond=False 10 11end_check_thread = threading.Thread(target=end_check) 12end_check_thread.start() 13 14 15while loop_cond: 16 現在価格を取得 17 if 条件: 18 注文関係の処理

投稿2019/03/24 08:30

otn

総合スコア84529

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

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

0

msvcrt --- MS VC++実行時システムの有用なルーチン群

ここのkbhitとgetchを組み合わせれば、ブロックしない1文字づつの入力ができます
それを文字列用バッファに展開していって、既定の文字列かEnterキーで何かをするようにすればいいかと。

投稿2019/03/24 08:13

編集2019/03/24 08:24
y_waiwai

総合スコア87774

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問