シェルスクリプト:シェルスクリプト内からPythonプログラムを実行する


139

私は答えをグーグルで試しましたが、運がありませんでした。

ワークススーパーコンピューターサーバーを使用する必要がありますが、Pythonスクリプトを実行するには、シェルスクリプトを介して実行する必要があります。

たとえばjob.sh、実行したいpython_script.py

どうすればこれを達成できますか?


2
python python_script.pyシェルスクリプトを入れてみましたか?
thkala

うーん、python python_script.py。または./python_script.py、スクリプトがシバンを得た場合。

2
@delnan:./python_script.pyでは、スクリプトが実行可能である必要もあります
thkala

あなたは正確に何を試しましたか、そして問題は何ですか?あなたがグーグル検索をそれほどうまくやらなかったか、あなたが私たちに言っていないことがたくさんあります...
thkala

3
これはかなり古い質問ですが、最良/最も完全な答えはJoãoVíctorによるものです。必ずお読みください。
Still.Tony 2014

回答:


193

Python実行可能ファイルがPATH環境変数に含まれていることを確認してから、スクリプトに追加します

python path/to/the/python_script.py

詳細:

  • ファイルjob.shに、これを入れてください
#!/bin/sh
python python_script.py
  • 次のコマンドを実行して、スクリプトを実行可能にします。 chmod u+x job.sh
  • それを実行します : ./job.sh

2
それはあなたのシステムに依存します。Python 3は、デフォルトのPythonランタイムである場合とそうでない場合があります。を実行して確認python --versionでき、でバージョンを強制できますpython3 hello.py
Jean-Bernard Jansen 2016

パンダなど、既にインストールされているインポートが見つからない場合はどうすればよいですか?
mah65

間違ったpythonバイナリを起動したか、環境が正しくありません。その場合は、virtualenvにデータを入力してから、実行してsource PATH/TO/VENV/bin/activateから呼び出す必要がありますpython python_script.py
Jean-Bernard Jansen

これをオートマトンで実行しようとしていますが、エラーが発生します。/path/to/Python: can't open file '/path/to/script': [Errno 1] Operation not permitted私のpythonコードをbashスクリプト内にインラインで含める方法はありますか?
Keyslinger

111

方法1-シェルスクリプトを作成します。

あなたはPythonのファイルがあるとhello.py 呼ばれるファイルを作成job.sh含まれてい

#!/bin/bash
python hello.py

使用して実行可能としてマークする

$ chmod +x job.sh

それを実行します

$ ./job.sh

方法2(より良い)-Python自体をシェルから実行します。

スクリプトhello.pyを変更し、これを最初の行として追加します

#!/usr/bin/env python

使用して実行可能としてマークする

$ chmod +x hello.py

それを実行します

$ ./hello.py

5
解読しやすいように回答を編集してください。応答エディターの101010ボタンを使用して、スクリプトの内容をコードとしてマークできます。
thkala

1
いつも忘れ#!/usr/bin/env pythonます。システムの正しいPythonバージョン+パスを参照していることを確認してください。
Still.Tony 14

10

イムホ、書く

python /path/to/script.py

特に最近ではかなり間違っています。どのパイソン?python2.6?2.7?3.0?3.1?ほとんどの場合、pythonファイルのshebangタグでpythonバージョンを指定する必要があります。私は使用することをお勧めします

#!/ usr / bin / env python2 #or python2.6 or python3 or python3.1
互換性のため。

そのような場合、スクリプトを実行可能にして直接呼び出す方がはるかに優れています。

#!/ bin / bash

/path/to/script.py

このようにして、必要なpythonのバージョンは1つのファイルにのみ書き込まれます。最近のシステムのほとんどでは、当面はpython2とpython3が使用されており、シンボリックリンクpythonpython3をポイントしているのに、ほとんどの人がpython2をポイントしていると予想しています。


1
と同じ方法でパラメータを渡すことができますpython script.py paramか?
クリスチャン

@kristian yes./abc.py -h

7

次のプログラムを次のように保存しますprint.py

#!/usr/bin/python3
print('Hello World')

次に、ターミナルタイプで:

chmod +x print.py
./print.py

4

これは私にとって最も効果的です。これをスクリプトの先頭に追加します。

#!c:/Python27/python.exe

(C:\ Python27 \ python.exeは私のマシンのpython.exeへのパスです)次にスクリプトを実行します:

chmod +x script-name.py && script-name.py

明確にするために、これはWindows固有です。そして、私が使用するプロンプトはGit bashです。とても便利です。特にWindows環境で
peterb 2015

4

これは私にとってはうまくいきます:

  1. 新しいシェルファイルジョブを作成します。だからとしましょう: touch job.sh Pythonスクリプトを実行するコマンドを追加します(そのPythonにコマンドライン引数を追加することもできます。通常、コマンドライン引数を事前定義します)。

    chmod +x job.sh

  2. 内部job.shに次のpyファイルを追加してみましょう。

    python_file.py argument1 argument2 argument3 >> testpy-output.txt && echo "Done with python_file.py"

    python_file1.py argument1 argument2 argument3 >> testpy-output.txt && echo "Done with python_file1.py"

job.shの出力は次のようになります。

Done with python_file.py

Done with python_file1.py

私は通常、事前に定義された異なる引数で複数のpythonファイルを実行する必要がある場合にこれを使用します。

注:ここで何が行われているのかを簡単に説明します。

python_file.py argument1 argument2 argument3 >> testpy-output.txt && echo "completed with python_file.py" . 

  • ここでシェルスクリプトはpython_file.pyファイルを実行します実行時に複数のコマンドライン引数をpythonファイルに追加します。
  • これは、必ずしもコマンドライン引数も渡す必要があるという意味ではありません。
  • 次のように使用できます:python python_file.py、プレーンでシンプル。次に、>>はこの.pyファイルの出力を印刷してtestpy-output.txtファイルに保存します。
  • &&は、上記が正常に実行された後にのみ実行される論理演算子であり、オプションの「python_file.pyで完了した」エコーが実行時にcli / terminalにエコーされます。

4

あなたはpython scriptname.py例えばそれを呼び出すことができるはずです

# !/bin/bash

python /home/user/scriptname.py 

また、スクリプトに実行権限があることを確認してください。

を使用して実行可能にすることができchmod u+x scriptname.pyます。


2

私はこれを使用し、それはうまくいきます

#/bin/bash
/usr/bin/python python python_script.py

1

他の投稿はすべてを語っているので(そして私は以下を探している間にこの投稿に出会いました)。
別のpythonスクリプトからpythonスクリプトを実行する方法は次のとおりです。

Python 2:

execfile("somefile.py", global_vars, local_vars)

Python 3:

with open("somefile.py") as f:
    code = compile(f.read(), "somefile.py", 'exec')
    exec(code, global_vars, local_vars)

そして、あなたは他のいくつかを提供することによって引数を供給することができます sys.argv

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.