是否可以将keyword = value作为参数传递给函数,其中值是来自另一个函数的参数?
例如
我定义了upper_dir
upper_dir='/somefolder'
我定义了我的工作目录:
def get_dir():
repo_path = subprocess.call(["pwd"])
return repo_path
我将upper_dir传递给create_branch函数:
branch = gitmods.create_branch(hostname, upper_dir)
现在create_branch需要调用syscmd函数,传递new_branch和upper_dir:
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
其他几个函数调用syscmd,但它们只传递1个参数。 我试图让'cwd ='默认为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
如果syscmd函数没有收到upper_dir,我希望它默认为get_dir中的值(这是pwd
据我所知,python可以接收函数的keyword = value参数,并且在没有提供参数时默认为特定值。 但是当你的参数不是一个字符串,而是来自另一个函数的参数时会发生什么呢?
我收到了这个错误:
def syscmd(command, current_dir=upper_dir):
NameError: name 'upper_dir' is not defined
答案 0 :(得分:3)
通常的做法是将参数的默认值设置为None
并使用if
语句进行检查:
def syscmd(command, current_dir=None):
if current_dir is None:
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
答案 1 :(得分:2)
你可以更简单地做到这一点。如果Popen
为cwd
,则None
默认为当前工作目录,您可以使用相同的规则。
def syscmd(command, cwd=None):
popen = subprocess.Popen(command,
shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
cwd=cwd)
out, err = popen.communicate()
out = out.rstrip()
return out
如果您的命令执行了os.path.join
之类的路径操作,则可以使用'。'作为默认
def syscmd(command, cwd='.'):
some_subpath = os.path.join(cwd, 'foo', 'bar')
...