web-dev-qa-db-ja.com

Python:サブプロセスと複数の引数を持つbashスクリプトの実行

サブプロセスモジュールを使用してbashスクリプトを実行するにはどうすればよいですか?

これは私が現在使用しているものです:

subprocess.Popen(['/my/file/path/programname.sh', 'arg1 arg2 %s' % arg3], \
    Shell = True)

Bashスクリプトはパラメーターを一切取り込んでいないようです。洞察は大歓迎です!

24
user2510173

引数をリストとして渡します。 ドキュメントの最初のコード例 を参照してください。

_import subprocess

subprocess.check_call(['/my/file/path/programname.sh', 'arg1', 'arg2', arg3])
_

_arg3_が文字列ではない場合。 check_call()arg3 = str(arg3)に渡す前に文字列に変換します。

37
jfs
subprocess.Popen(['/my/file/path/programname.sh arg1 arg2 %s' % arg3], Shell = True).

Shell = Trueを使用する場合、スクリプトとその引数は文字列として渡す必要があります。 argsシーケンス内の他の要素は、シェルへの引数として扱われます。

完全なドキュメントは http://docs.python.org/2/library/subprocess.html#subprocess.Popen にあります。

5
user2504723

こんにちは、私はこれが解決策であることはかなり遅いことを知っていますが、誰かを助けることができます。

例:

import subprocess
pass_arg=[]
pass_arg[0]="/home/test.sh"
pass_arg[1]="arg1"
pass_arg[2]="arg2"

subprocess.check_call(pass_arg)

上記の例では、シェルスクリプトtest.shのパラメーターとしてarg1とarg2を提供しています。

基本的に、サブプロセスには配列が必要です。したがって、配列にデータを入力し、パラメーターとして提供できます。

2
Sairaj Madhavan

上記のすべてに含まれていないもう1つの例は、

subprocess.Popen(['/your/script.sh %s %s %s' %(argument1,argument2,argument3)], Shell = True)

%(argument1,argument2,argument3)と入力するとき、_%_と_(_の間にスペースがあってはならないことに注意してください。たとえば、% (argument1,argument2,argument3)は無効です。

0
Chintan Gotecha