Ist es möglich, ein Schlüsselwort = Wert als Argument an eine Funktion übergeben, wo der Wert ein Argument von einer anderen Funktion ist?NameError: Name ist nicht definiert, wenn mit Schlüsselwort = Wert
Zum Beispiel
Ich definiere upper_dir
upper_dir='/somefolder'
definiere ich meine Arbeits dir:
def get_dir():
repo_path = subprocess.call(["pwd"])
return repo_path
I upper_dir zum create_branch Funktion übergeben:
branch = gitmods.create_branch(hostname, upper_dir)
Jetzt create_ Zweig braucht die syscmd Funktion aufzurufen, es new_branch und upper_dir vorbei:
def create_branch(hostname, upper_dir):
random = randint(100000, 999999)
new_branch = 'git checkout -b removes-node-{0}'.format(random)
syscmd(new_branch, upper_dir)
repo_branch = 'git branch | grep "*"'
branch = syscmd(repo_branch)
branch = branch.split()[1]
return branch
Mehrere andere Funktionen syscmd nennen, aber sie geben es nur 1 Argument. Ich versuche zu bekommen ‚cwd =‘ auf den Wert von upper_dir
def syscmd(command, current_dir=upper_dir):
current_dir=str(get_dir())
popen = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, cwd=current_dir)
out, err = popen.communicate()
out = out.rstrip()
return out
enthaltenen Standard Wenn die syscmd Funktion nicht erhalten upper_dir, ich habe es auf den Wert von get_dir auf Standard will (das ist aktuelles linux-Verzeichnis von pwd
resultierenden Soweit ich das beurteilen kann, kann python Schlüsselwort = Wert Argumente eine Funktion und Standard auf einen bestimmten Wert erhalten, wenn kein Argument angegeben ist. Aber was passiert, wenn Ihr Argument nicht ist eine Zeichenkette, aber stattdessen ein Argument von einer anderen Funktion?
Ich erhalte diese Fehlermeldung:
def syscmd(command, current_dir=upper_dir):
NameError: name 'upper_dir' is not defined
'upper_dir' ist nicht definiert, wenn die Datei kompiliert wird. –
Wie löse ich das, wenn upper_dir in __main__ definiert ist, aber die Funktionen, an die es übergeben wird, in einem Modul sind? – ARL
Nebenbei, os.getcwd() 'bekommt auch das aktuelle Arbeitsverzeichnis. – tdelaney