web-dev-qa-db-ja.com

Pythonシェルの引数を使用してファイルを実行します

Python Shellでコマンドを実行して、引数付きのファイルを実行したいと思います。

例:execfile("abc.py")しかし、2つの引数を追加する方法は?

63
olidev

execfileはPythonファイルを実行しますが、スクリプトとしてではなく、それをロードすることにより実行します。引数ではなく、変数バインディングでのみ渡すことができます。

Python内からプログラムを実行する場合は、 subprocess.call を使用します。例えば。

subprocess.call(['./abc.py', arg1, arg2])
45
Fred Foo

これを試して:

import sys
sys.argv = ['arg1', 'arg2']
execfile('abc.py')

abc.pyが終了すると、呼び出し元プログラムに制御が返されることに注意してください。本当に終了したら、abc.pyquit()を呼び出すことができることにも注意してください。

53
buggywhip

実際、これをやりたくはありませんか?

import sys
sys.argv = ['abc.py','arg1', 'arg2']
execfile('abc.py')
46
user2757262
import sys
import subprocess

subprocess.call([sys.executable, 'abc.py', 'argument1', 'argument2'])
25
nosklo

モジュールを現在のインタープリタープロセスに読み込み、外部でPythonスクリプトを呼び出すのは混乱しています。

前者は、目的のファイルをimportingすることで実行できます。 execfile はインポートに似ていますが、モジュールを作成するのではなく、単にファイルを評価します。シェルスクリプトの「ソース」に似ています。

後者は、サブプロセスモジュールを使用して実行できます。インタープリターの別のインスタンスを生成し、必要なパラメーターを渡します。これは、バッククォートを使用したシェルスクリプトでのシェルアウトに似ています。

10
Noufal Ibrahim

さらに興味深いシナリオについては、runpyモジュールもご覧ください。 python 2.7以降、run_path関数があります。例えば:

import runpy
import sys

# argv[0] will be replaced by runpy
# You could also skip this if you get sys.argv populated
# via other means
sys.argv = ['', 'arg1' 'arg2']
runpy.run_path('./abc.py', run_name='__main__')
7
petre

execfile()でコマンドライン引数を渡すことはできません。代わりに subprocess を見てください。

実行するpythonファイルにPYTHONINSPECTを設定した場合

[repl.py]

import os
import sys
from time import time 
os.environ['PYTHONINSPECT'] = 'True'
t=time()
argv=sys.argv[1:len(sys.argv)]

execfileを使用する必要はなく、シェルで通常どおり引数を使用してファイルを直接実行できます。

python repl.py one two 3
>>> t
1513989378.880822
>>> argv
['one', 'two', '3']
1
loretoparisi

subprocess.callに加えて、subprocess.Popenも使用できます。次のように

subprocess.Popen(['./script', arg1, arg2])

0
Anakin Tung

スクリプトを並行して実行し、それらに異なる引数を与えたい場合、以下のようにすることができます。

import os
os.system("python script.py arg1 arg2 & python script.py arg11 arg22")
0
Mehmet nuri