2017-11-19 9 views
0

デフォルトでファイルから入力したいと思っています。たとえば :デフォルトの標準入力としてファイルを作成する

num=input() 

このステートメントではなく、キーのヒットを待っているのファイルからの入力を取る必要があります。私は標準入力をファイルにリダイレクトすることによってそれをしたくないので、デフォルトでそれを望みます。単に、キーボードは入力用のデフォルトのデバイスなので、キーボードの代わりにファイルに入力を欲しいと思っています。あなたはこのようなOSレベルでの標準入力にファイルを添付することができ

+1

'input'は、定義上、標準入力からの読み取り用です。ファイルを標準入力に接続したくない場合は、 'input'を使用したくありません。 'fileinput'モジュールを試してください。 – chepner

+1

ファイルの読み込みに 'input'を使うことはできません。 –

+0

何らかの理由で 'fileinput'モジュールを使いたくない場合は、' sys.stdin = open( "file to") 'パスで手動で再割り当てしてから、' input() '関数が文字を読み込みますそのファイルから。 – martineau

答えて

0

:スクリプトに

python script.py <input.txt 

、それはファイルから次の行のユーザタイプ、input()が呼び出されるたびに同じように見えるだろう。

+0

実際に私はJavaからpythonスクリプトを実行しています。ファイルから入力をリダイレクトせずに実行している場合は、正常に動作しています: プロセスp = Runtime.getRuntime()。exec( "python add.py");私はあなたが提案した方法を使用しているので、それは動作しません。 プロセスp = Runtime.getRuntime()。exec( "python add.py

0

簡単な回避策です。

def file_input(filename): 
    with open(filename, 'r') as f: 
     for line in f: 
      yield line 
_input_iterator = file_input('input.txt') 

def input_():    # replace input 
    return _input_iterator.next() 

グローバル変数は、クラスでラップするか、モジュールにすることで回避できます。


私はこれが好きではありません。本当にUNIXモデルでは標準入力(ウィンドウ上でそれをtryiedしていない)

import sys 
sys.stdin = file('input.txt', 'r') 
input_line = input() 

を交換するには、stdinは単なるファイルです。 pipeのようなユーティリティを使用する場合は、子プロセスのstdinを変更/リダイレクトします。プロセスのstdinが親のスコープ(端末など)で変更されていると、より快適に感じられます。それ以外の場合は、もうstdのようには見えません。

+0

あなた(およびOP)が 'fileinput' [documention](https://docs.python.org/3/library/fileinput.html#module-fileinput)を見てみることをお勧めします。 – martineau

+0

'fileinput'は実際より妥当です!たぶん、質問者はグローバル名 'input'で立ち往生しているかもしれません。 –

関連する問題