質問編集履歴

1

解決

2019/03/25 17:27

投稿

KojiDoi
KojiDoi

スコア13671

test CHANGED
File without changes
test CHANGED
@@ -211,3 +211,31 @@
211
211
  0. `python script.py`と`python < script.py`で挙動が異なるのはなぜか。
212
212
 
213
213
  0. 事態を解決し、つつがなく`python script.py`できるようにするには何をすればよいか。
214
+
215
+
216
+
217
+ ### 解決
218
+
219
+
220
+
221
+ まず質問文に不正確な記述があったことをお詫びせねばなりません。実際に行った確認作業は次のようなものでした。
222
+
223
+ ```
224
+
225
+ cd ~
226
+
227
+ python2.7 ~/work/dftest1.py
228
+
229
+ ...
230
+
231
+ python2.7 < ~/work/dftest1.py
232
+
233
+ ```
234
+
235
+ 問題の直接の原因は~/workにdatetime.pycというファイルが存在していたことにありました。当該ディレクトリは実験や勉強のために試作スクリプトを色々作り置いている場所で、自分でも覚えていませんがおそらくpythonを勉強し始めた初期のころに間違えて作ってしまったのだと思われます。datetime.pyというファイルが悪さをしている可能性は疑っていたのですが、.pycは盲点でした。
236
+
237
+ そして、モジュールのサーチパスに関して私は認識不足でした。
238
+
239
+ スクリプト名を引数として直接指定した場合は、そのスクリプトが存在するディレクトリがサーチパスの先頭に追加される。しかし、標準入力からリダイレクトで流し込んだ時は、スクリプトファイル名をpython自体は与り知らないので、その場所がサーチパスに追加されることはない。これが「挙動が異なった」原因でした。
240
+
241
+ ~/work/datetime.pycを消去したところ、あっさり実行に成功です。わかってみれば下らない理由でした……。