wake-up-neo.com

Führen Sie eine Datei mit Argumenten in der Python-Shell aus

Ich möchte einen Befehl in Python Shell ausführen, um eine Datei mit einem Argument auszuführen.

Zum Beispiel: execfile("abc.py") aber wie füge ich 2 Argumente hinzu?

59
olidev

execfile führt eine Python-Datei aus, aber indem sie geladen wird, nicht als Skript. Sie können nur Variablenbindungen übergeben, keine Argumente.

Wenn Sie ein Programm in Python ausführen möchten, verwenden Sie subprocess.call . Z.B.

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

versuche dies:

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

Wenn abc.py beendet ist, wird die Steuerung an das aufrufende Programm zurückgegeben. Beachten Sie auch, dass abc.pyquit() aufrufen kann, wenn er tatsächlich beendet ist.

51
buggywhip

Wollten wir das eigentlich nicht?

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

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

Sie sind verwirrend, wenn Sie ein Modul in den aktuellen Interpreterprozess laden und ein Python-Skript extern aufrufen. 

Ersteres kann durch importing der gewünschten Datei ausgeführt werden. execfile ähnelt dem Importieren, aber es wertet die Datei einfach aus, anstatt daraus ein Modul zu erstellen. Ähnlich wie "Sourcing" in einem Shell-Skript. 

Letzteres kann mit dem Subprozess-Modul durchgeführt werden. Sie spawn eine andere Instanz des Interpreters aus und übergeben die gewünschten Parameter dazu. Dies ähnelt dem Shells out in einem Shell-Skript mit Backticks. 

10
Noufal Ibrahim

Für weitere interessante Szenarien können Sie auch das Modul runpy betrachten. Seit Python 2.7 verfügt es über die Funktion run_path. Z.B:

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__')
6
petre

Sie können keine Befehlszeilenargumente mit execfile() übergeben. Schauen Sie sich stattdessen subprocess an.

Wenn Sie in der Python-Datei, die Sie ausführen möchten, PYTHONINSPECT setzen

[repl.py]

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

execfile muss nicht verwendet werden, und Sie können die Datei wie üblich direkt in der Shell ausführen:

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

Neben subprocess.call Können Sie auch subprocess.Popen Verwenden. Wie das folgende

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

0
Anakin Tung

Wenn Sie die Skripts parallel ausführen und ihnen unterschiedliche Argumente geben möchten, können Sie dies wie folgt tun. 

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