2017-03-20 8 views
0

から実行したときに、私はこのコードを実行しているコンパイルされていません。Pythonは、端末から実行時にコンパイルしますが、原子エディタ

import os 

file_path = os.path.dirname(__file__) 
print file_path 

accel = open(os.path.dirname(__file__) + '/../imu/accel.txt') 

まず私は「スクリプト」パッケージを使用して、私の原子エディタからそれを実行し、

enter image description here

をしかし、私は私が手の端末から同じコードを実行したとき:それは出力

Traceback (most recent call last): 
    File "imu_pub2.py", line 9, in <module> 
    accel = open(os.path.dirname(__file__) + '/../imu/accel.txt') 
IOError: [Errno 2] No such file or directory: '/../imu/accel.txt' 

なぜこれが起こっていますか?

コンパイルエラーは、コードの最後の行で発生します。何らかの理由で端末のprint文が何も印刷していない。問題はそこから始まります。

+1

'' 'accel = open(os.path.join(file_path、 '../ imu/accel.txt'))に変更してみてください。' '' – kra3

答えて

0

変更os.path.dirname(__file__)

os.path.dirname(os.path.abspath(__file__))の問題は、あなたが python imu_pub2.pyとしてスクリプトを実行すると __file__変数は「imu_pub2.py」に設定されていることです。その文字列はディレクトリ部分のないファイル名に過ぎないので、 dirname(__file__)は空の文字列を生成します。つまり、 file_pathは空の文字列なので、 printのときは何も表示されません。 dirnameの結果は空であるため、 accelは "/../imu/accel.txt"に設定されています。そのようなファイルはマシンに存在しないため、 openは失敗します。

abspathを使用すると、__file__の完全なディレクトリパスが得られます。これにより、dirnameに必要な結果が得られます。

ちょうど一緒に文字列を連結する代わりにos.path.joinを使用すると、kra3は正しいと言えます。しかし、それはバグの原因ではありません。

+0

こんにちは。それは今働く。しかし、私は原子とどのように働いていたのか分かりません。あなたは「原子」がそれをどのように実行していると思いますか? – user10678

+0

'__file__'はコマンドラインで指定されたモジュール名を含んでいますので、atomがあなたのスクリプトを' python/full/path/to/your/imu_pub2.py'として実行していると思います。スクリプトが終了する前に待つようにすることで確認できます( 'import sys'と' sys.stdin.readline() '、' import time'と 'time.sleep(200)'を追加してください)。次に、別の端末ウィンドウで 'ps'を使い、Windows上であれば' taskmgr'を使って、どのようにして原子がコマンドラインを構築したかを確かめてください。 – ottomeister

関連する問題