私はいくつかのpythonスクリプトはうまく動作しますが、bashから実行しようとすると1つのスクリプトが(今朝の時点で)私にこのエラーを与え始めました:
: そのようなファイル、又はディレクトリはありません
python script_name.py
を実行することで「壊れた」スクリプトを実行できます。少し調べた後、ハッシュバンの末尾の行が(サイレントに)変更された可能性があるので、行を確認しました。この質問に示されているように、VIの:set list
オプションを使用した作業スクリプトと破損スクリプトの終了-> テキストファイルの行末を表示
両方のファイルが同じ文字($
)を使用して終了しているように見えるため、ここから先に進む方法について少し迷っています。具体的には、set list
が適切な方法ではなかった場合に実際に行末を「見る」方法。
PS:スクリプトは実行可能で、Shebangはそこにあります。週末までに正常に機能していたのはこの1つのスクリプトだけでしたが、今朝からこのエラーが発生し始めたと述べました。
-編集:-
dos2unix
を介してスクリプトを実行すると再び機能しますが、VI(M)で行末を何らかの方法で視覚化する方法、またはGeanyが最初に行末を何らかの方法で変換した理由を知りたいとにかくDOS/Windowsシステムで動作します)。
上記のコメントから、dos行の終わりがあるように見えるため、hashbang行は適切に処理されません。
行末スタイルは、Vimでは:set list
で表示されません。これは、このオプションがファイルの読み取り/書き込み時にのみ使用されるためです。メモリでは、行末は常に行末です。ファイルに使用される行末スタイルは、奇妙なことにfileformat
と呼ばれるVimのファイルごとのオプションに保持されます。
Vimの行末スタイルを表示/変更するには、次のコマンドを使用できます。
:set fileformat
:set ff
dos
またはunix
が表示されます。もちろんunix
が必要です;-)。
すばやく変更するには、次の方法でファイルを保存できます。
:w ++ff=unix
または、必要に応じて:
:set ff=unix
そして、通常どおりファイルを保存します。
:help fileformat
、:help file-formats
、および:help fileformats
を実行するだけで、すべての面倒な詳細を確認できます
Dos2unixコマンドを使用してファイル形式を変換することもできます
これはpythonスクリプトを実行するのに役立ちました
これは通常、Windowsでファイルを開いて変更を加えて保存するときに発生します。ファイルを開くと、すべての行の最後に^ M文字があります
ありがとう
個人的には、pythonインタープリターへの直接パスを使用すると、ちょっと間違っています。 Windowsプラットフォームを使用しないので、通常は/ usr/bin(/ usr/bin/env)にあるプログラムenvが必要です。次のShebangを使用してみてください。
#!/usr/bin/env python
異なるディストリビューションは、pythonバイナリを/ binまたは/ usr/bin(またはいくつかの奇妙な場所)に保存します。これにより、スクリプトは設定に依存しなくなります(可能な限り、envは別の場所に保存される可能性があります。 -envがpythonの位置が間違っているよりも/ usr/binにない可能性は低いです)。
(まったく同じではないにしても)同様の問題があり、それは私にとってはうまくいきました。
また、両方のpythonインタープリター(2.7.xおよび3.x)がインストールされているため、envに「python3」引数を使用する必要があります。 AFAIRは通常、異なる名前を異なるバイナリにリンクするため、「env python」はシステム上でpython2.7を実行し、「env python3」(python33、またはそのようなsmth)はp3kを実行し、「env python2」(python27、など)python 2.7.xを実行します。使用するインタープリターのバージョンを宣言することも良い考えのようです。
Windowsでコードを編集し、gitでコードをチェックインし、Linuxでコードをチェックアウトして実行すると、この問題に遭遇しました。
私の解決策は、Do The Right Thingをgitに伝えることでした。 Windowsボックスでこのコマンドを発行しました。
git config --global core.autocrlf true
ファイルを変更してチェックインしました。出来上がり、そのような問題はもうありません。
Gitドキュメント で説明したとおり。